我有一个py文件,其中的函数需要多处理,所以我做了如下操作:
pool = Pool()
def function_():
pool.map(...)
然后,我将这个文件导入到主文件中,但是当我运行function_
时,我得到:
后台进程不允许有子进程
这通常是由于多处理将在调用文件的地方重新运行该文件(因此,通常必须将池插入if __name__ == "__main__"
,请参见此处Python multiprocessing gets stuck)...是否有办法避免这种情况?
2条答案
按热度按时间ltskdhd11#
根据您发布的内容,不清楚为什么
pool
需要是全局的,但如果是这样,您可以在导入的模块中添加以下函数定义:您的主脚本只需导入此函数并在调用
function_
之前调用它。如果pool
不需要是全局的,只需将池创建移至 insidefunction_
。hrirmatl2#
只需重构所有需要多处理池的函数,让它们将池示例作为参数,然后在主模块中示例化池,并将其传递给从包中导入的函数,比如说,模块
worker.py
看起来如下所示:主模块
main.py
如下所示:一切正常: