【发布时间】:2012-02-18 23:27:18
【问题描述】:
我确定这是一个新手错误,但我无法弄清楚我在多处理方面做错了什么。我有这段代码(只是闲置,什么都不做)
if __name__ == '__main__':
pool = Pool(processes=4)
for i, x in enumerate(data):
pool.apply_async(new_awesome_function, (i, x))
pool.close()
pool.join()
data 是一个列表([1,2,3,4,5]),我正在尝试将列表发送到要在多个 cpu 上完成的每个项目,但是当我将我的工作命令包装到一个函数中并发送这段代码它没有做任何事情(当我在没有上面代码的情况下调用函数本身时它工作正常)。所以我认为我使用错误的多处理(虽然我从网站上举了例子),有什么建议吗?
更新:我注意到当它用 control-c 冻结时我什至无法摆脱它。它总是可以摆脱我的错误程序。我查看了python2.5 multiprocessing Pool 并尝试遵循建议并在我的 if 语句中添加了导入但没有运气
Update2:对不起,感谢下面的答案,该命令有效,但它似乎没有终止程序或让我强制退出。
【问题讨论】:
-
您的问题可能出在
my_awesome_function我认为您需要向我们展示该功能。 -
我刚刚发布了代码和预期的结果(在我添加多处理之前有效)
-
它太奇怪了,通常我会收到一个错误,它不会做任何事情并挂起。起初它会运行但不会退出(这是一个简单的例子),但是在我把我的完整代码放在没有运行之后它仍然不让我退出。我尝试将打印语句全部用于调试,但没有一个被触发(即使是 if 语句之外的那些