5

尝试以下非常简单的示例会导致我的计算机停止运行,因此我必须重新启动。检查任务管理器会显示数百个“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,这导致了一个稍微不同的问题:任务永远不会完成,但它不会导致我的计算机死机。

有任何想法吗?

4

1 回答 1

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块,生成代码将仅在模块的父实例中运行。

于 2012-12-18T14:41:18.533 回答