python中的多处理[破池进程]

Posted

技术标签:

【中文标题】python中的多处理[破池进程]【英文标题】:Multiprocessing in python [broken pool process] 【发布时间】:2022-01-08 08:07:31 【问题描述】:

我是多处理的新手,正在探索如何使用它们。正如我提到的python documentation example,我刚刚尝试了我的一个功能,但我的 jupyter notebook 给了我一个错误。可能是什么原因?

import concurrent.futures

def dummy(x):
    return x**(1/200)

def main():
    with concurrent.futures.ProcessPoolExecutor() as executer:
        x =[1,2,3,4,5,6]
        future = executer.map(dummy,x)
        for result in future:
            print(result)
if __name__ == '__main__':
    main()

错误是:我将如何解决这个问题?我有最新版本的 Python。


BrokenProcessPool:进程池中的一个进程被终止 在未来正在运行或未决时突然发生。

【问题讨论】:

检查我的编辑,我准确地代表了你的代码。否则它对我来说运行得很好。我无法用您的代码重现此错误。通常,当您向池构造函数提供initializer 函数时会发生此错误,该函数在调用时引发错误。但是,如果工作进程根本无法启动(某些服务器对进程数量施加限制),或者工作进程被外部源杀死(可能是防病毒...... idk),也会发生这种情况。 这里也一样。正常工作。 【参考方案1】:

看起来我在使用 Jupyter 笔记本,这是问题所在。我刚刚阅读了文档中的一行,“ma​​in 模块必须可由工作子进程导入。这意味着 ProcessPoolExecutor 将无法在交互式解释器中工作”。

【讨论】:

以上是关于python中的多处理[破池进程]的主要内容,如果未能解决你的问题,请参考以下文章

Python中的多进程

Keras + Tensorflow 和 Python 中的多处理

python3中的多处理在mac和linux上运行时得到不同的值

Python 线程与 Linux 中的多处理

python中的多处理模块和修改共享的全局变量

为啥 Python 的多处理模块在 Windows 上启动新进程时会导入 __main__?