首页 文章

在IDLE中定义时,Python池会无故障崩溃

提问于
浏览
1

我正在尝试使用 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)

1 回答

  • 1

    问题是你的代码:它缺少 if __name__ == '__main__': guard子句,它是多处理文档章节中每个工作示例的重要组成部分,因为它使每个子进程都不会运行开始和结束代码 . 在空闲时运行以下内容(或在控制台中没有空闲)

    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版本的最新版本 . 特别是在闲置的情况下,经过几年左右的停滞,过去两年中出现了许多修复 .

相关问题