gpt4 book ai didi

python - 如何处理 multiprocessing.Pool 中的初始化错误?

转载 作者:行者123 更新时间:2023-11-28 21:38:52 25 4
gpt4 key购买 nike

当初始化程序抛出如下错误时,脚本不会停止。
我想在开始主进程之前中止(不要运行“do_something”)。

from multiprocessing import Pool
import contextlib

def initializer():
raise Exception("init failed")

def do_something(args):
# main process
pass

pool = Pool(1, initializer=initializer)
with contextlib.closing(pool):
try:
pool.map_async(do_something, [1]).get(100)
except:
pool.terminate()

下面是控制台上永不停止的堆栈跟踪

...
Exception: init failed
Process ForkPoolWorker-18:
Traceback (most recent call last):
File "/home/hoge/anaconda3/lib/python3.6/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/home/hoge/anaconda3/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/home/hoge/anaconda3/lib/python3.6/multiprocessing/pool.py", line 103, in worker
initializer(*initargs)
File "hoge.py", line 5, in initializer
raise Exception("init failed")
Exception: init failed
...

我的解决方法是通过使用如下所示的全局标志来抑制初始化程序错误并在主进程开始时返回。
但我想学一个更好的。

def initializer():
try:
raise Exception("init failed")
except:
global failed
failed = True

def do_something(args):
global failed
if failed:
# skip when initializer failed
return
# main process

最佳答案

在使用 PyCharm 浏览了多处理的实现之后,我确信没有更好的解决方案,因为如果存在任何工作进程,Pool 会通过 _repopulate_pool() 启动一个线程到 _maintain_pool()——要么是意外的,要么是初始化失败.

检查一下:Lib/multiprocessing/pool.py line 244

关于python - 如何处理 multiprocessing.Pool 中的初始化错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com