【问题标题】:Why does the Multiprocessing Pool method raise a TimeoutError?为什么多处理池方法会引发 TimeoutError?
【发布时间】:2018-02-20 01:55:41
【问题描述】:

我将此用作示例代码,但它被冻结了。我打开了任务管理器,查看了分配的资源。我可以看到运行代码前后进程数的变化,但我不明白为什么它会导致控制台冻结。 这仅在 Spyder 中发生。如果我从命令行调用脚本,它会正常运行。

import multiprocessing as mp
def doubler(number):
   return number*2
if __name__=='__main__':    
    pool=mp.Pool(processes=3)
    arglist=[1,2,3]
    result=[pool.apply_async(doubler,(i,)) for i in arglist]
    for res in result:
        print(res.get())

我还使用了来自documentation 的示例代码,它引发了一个没有任何描述的 TimeoutError。 截图:TimeoutError

【问题讨论】:

  • 另外,我应该提一下,您在此处发布的代码与您运行的代码不同。
  • 请不要张贴截图或文本截图的链接。直接将其包含在您的问题中。
  • @coldspeed 我运行的代码位于我在此处发布的代码下方指向的链接中。这两个代码都在单独的 python 控制台中运行,但在 Spyder 中引发错误。
  • @mata 正式注明。

标签: python-3.x python-multiprocessing


【解决方案1】:

您似乎在 windows 上的交互式解释器中运行它。

文档中有a note about that

注意: 此包中的功能要求子模块可以导入__main__ 模块。这在编程指南中有介绍,但值得在这里指出。这意味着某些示例,例如 multiprocessing.pool.Pool 示例将无法在交互式解释器中运行

虽然它在某些情况下可以工作(如果操作系统支持fork(),那么多处理可以使用fork start method,但 Windows 不支持),但最好遵循该建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多