在IDLE中定义Python Pool时静默崩溃
我正在尝试在Python中使用multiprocessing
这个包。但是,当我在IDLE中定义一个进程池时,它会悄无声息地崩溃(没有错误信息或追踪记录,IDLE直接关闭了)。另一方面,同样的脚本在终端中运行时没有问题。怎么回事呢?我使用的是Ubuntu 12.04上的Python 2.7。
import multiprocessing
from multiprocessing import Pool
def myfunc(x):
return x*x
cpu_count = int(multiprocessing.cpu_count() - 1)
pool = Pool(processes = cpu_count) #Crashes here in IDLE
resultlist = pool.map(myfunc, range(10))
pool.close()
print(resultlist)
1 个回答
1
问题出在你的代码上:它缺少一个重要的部分,就是if __name__ == '__main__':
这行代码。这是多进程文档中每个有效示例都必须有的,因为它可以防止每个子进程都去执行开始和结束的代码。在Idle(或者在控制台中不使用Idle)运行以下代码:
import multiprocessing
from multiprocessing import Pool
def myfunc(x):
return x*x
if __name__ == '__main__':
cpu_count = int(multiprocessing.cpu_count() - 1)
pool = Pool(processes = cpu_count) #Crashes here in IDLE
resultlist = pool.map(myfunc, range(10))
pool.close()
print(resultlist)
几乎立刻就会打印出
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
如果你在控制台中运行你原来的代码(或者在控制台中启动Idle),你会看到一连串的错误信息,因为每个进程都在启动更多的进程。
补充说明:上述行为发生在Windows 10上。
我建议你不要听别人的意见,而是根据当前的实际情况自己决定想用什么工具。尽量使用你所用的Python版本的最新修复版本。特别是对于Idle,过去两年里有很多修复,之前有一段时间几乎没有更新。