尝试以下非常简单的示例会导致我的计算机停止运行,因此我必须重新启动。检查任务管理器显示数百个“python.exe”任务:
import math
from multiprocessing import Pool
pool = Pool(processes=2)
print pool.map(math.sqrt, [1,4,9,16])
我使用的是双核cpu(i5 2467m),所以我认为以上都没问题。
我尝试设置processes=1
,这会导致稍微不同的问题:任务永远不会完成,但不会导致计算机冻结。
有什么想法吗?
答案 0 :(得分:8)
我第一次玩multiprocessing
时遇到了同样的问题。将池生成代码包装在if __name__ == '__main__'
块中。
import math
from multiprocessing import Pool
if __name__ == '__main__':
pool = Pool(processes=2)
print pool.map(math.sqrt, [1,4,9,16])
正在发生的事情是,在创建子进程时,您的模块正在被打开,并在无限递归中重新运行池生成代码。使用if
块,产生代码将仅在模块的父实例中运行。