尝试以下非常简单的示例会导致计算机停止运行,因此我必须重新启动.检查任务管理器显示数百个"python.exe"任务:
import math
from multiprocessing import Pool
pool = Pool(processes=2)
print pool.map(math.sqrt, [1,4,9,16])
Run Code Online (Sandbox Code Playgroud)
我使用的是双核cpu(i5 2467m)所以我认为以上都没问题.
我尝试设置processes=1,这导致一个稍微不同的问题:任务永远不会完成,但它不会导致我的计算机冻结.
有任何想法吗?
我第一次玩的时候遇到了同样的问题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])
Run Code Online (Sandbox Code Playgroud)
发生的事情是,在创建子进程时,您的模块正在进行unpickled并在无限递归中重新运行池生成代码.使用该if块,产生代码将仅在模块的父实例中运行.