首页 > 解决方案 > 在 python 多处理中, .get() 总是超时,即使在已知可以工作的代码中

问题描述

在我尝试使用 .get() 显示一些结果之前,我的多处理代码似乎工作正常,除非我使用 .get(timeout=5),否则它将永远挂起,我得到一个错误说它超时。我直接使用多处理文档页面中的代码来确保没有错误。

from multiprocessing import Process, Queue

def f(q):
    q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print(q.get(timeout=5))    # prints "[42, None, 'hello']"
    p.join()
---------------------------------------------------------------------------
Empty                                     Traceback (most recent call last)
<ipython-input-14-6adfdb672fe3> in <module>
      8     p = Process(target=f, args=(q,))
      9     p.start()
---> 10     print(q.get(timeout=5))    # prints "[42, None, 'hello']"
     11     p.join()

~\Anaconda3\lib\multiprocessing\queues.py in get(self, block, timeout)
    103                     timeout = deadline - time.monotonic()
    104                     if not self._poll(timeout):
--> 105                         raise Empty
    106                 elif not self._poll():
    107                     raise Empty

Empty:

我真的不知道为什么 .get() 会永远持续下去,因为我为多处理找到的几乎每一段示例代码似乎都可以很好地使用它。

标签: pythonpython-multiprocessing

解决方案


推荐阅读