我发现文档没有提到它:https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.Executor.map
参考:
当与Future关联的可调用对等待另一个Future的结果时,可能会发生死锁。
这里的两个例子显示了死锁是如何发生的。尝试用.submit()
替换.map()
并进行其他必要的更改
在引擎罩:
根据Python的python3.6/concurrent/futures/thread.py
模块(在系统中搜索此文件,类ThreadPoolExecutor
实际上使用queue.Queue()
(参见第107行)来实现python线程并使用原始threading.Lock()
(参见第110行)来锁定线程。
说明:
如果您“线程安全”意味着程序中的多个线程都试图访问内存中的公共数据结构或位置,那么您应该知道concurrent.futures.ThreadPoolExecutor
一次只允许一个线程访问内存中的公共数据结构或位置; threading.Lock()
原语用于管理它。当你的一个线程中的函数需要等待另一个线程中的结果时,就会发生死锁并且你的代码不能工作;你应该避免这样做。