`concurrent.futures.map`是线程安全的吗?

问题描述 投票:0回答:1

我发现文档没有提到它:https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.Executor.map

python-3.x concurrent.futures
1个回答
1
投票

参考:

根据ThreadPoolExecutor

当与Future关联的可调用对等待另一个Future的结果时,可能会发生死锁。

这里的两个例子显示了死锁是如何发生的。尝试用.submit()替换.map()并进行其他必要的更改

在引擎罩:

根据Python的python3.6/concurrent/futures/thread.py模块(在系统中搜索此文件,类ThreadPoolExecutor实际上使用queue.Queue()(参见第107行)来实现python线程并使用原始threading.Lock()(参见第110行)来锁定线程。

说明:

如果您“线程安全”意味着程序中的多个线程都试图访问内存中的公共数据结构或位置,那么您应该知道concurrent.futures.ThreadPoolExecutor一次只允许一个线程访问内存中的公共数据结构或位置; threading.Lock()原语用于管理它。当你的一个线程中的函数需要等待另一个线程中的结果时,就会发生死锁并且你的代码不能工作;你应该避免这样做。

© www.soinside.com 2019 - 2024. All rights reserved.