Python多处理内存泄漏与enthought冠层?

时间:2013-08-20 16:17:48

标签: python multithreading multiprocessing enthought

def print_square(i):
    print str(i*i)

from multiprocessing import Pool
p = Pool(1)
for i in range(10):
    p.apply_async(print_square, args=(i,))
p.close()
p.join()

产生无限的进程,并在Windows 8上使用64位canopy在python 2.7上崩溃我的机器。为什么呢?

1 个答案:

答案 0 :(得分:2)

在Windows上,由于没有fork,多处理会生成一个新进程,运行python并导入调用模块。

如果导入调用模块本身会产生一个新进程,那么你将自己进行分叉轰炸。为了防止这种情况发生,请将生成新进程的代码放在

if __name__ == '__main__':

这是有效的,因为导入模块时不会执行if-statement内的代码。

在文档中有关于此的警告。见标题部分 Safe importing of main module


所以使用

from multiprocessing import Pool


def print_square(i):
    print str(i * i)

if __name__ == '__main__':
    p = Pool(1)
    for i in range(10):
        p.apply_async(print_square, args=(i,))
    p.close()
    p.join()