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上崩溃我的机器。为什么呢?
答案 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()