我正在尝试将multiprocessing
包用于python。但是,当我尝试在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)
答案 0 :(得分:1)
问题是您的代码:它缺少if __name__ == '__main__':
保护子句,它是多处理文档章节中每个工作示例的重要组成部分,如它使每个子进程都不会运行开始和结束代码。在空闲状态下运行以下内容(或在控制台中没有空闲状态)
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版本的最新版本。特别是在闲置的情况下,经过几年左右的停滞,过去两年中出现了很多修复。