使用多处理模块的简单玩具示例使计算机崩溃

时间:2012-12-18 14:40:05

标签: python

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

有什么想法吗?

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