我现在敲打了一天以上的时间,试图理解为什么我的程序的孩子不能提出任何异常而只是死亡,而不是整个{{1} }挂起。让我补充一点,我在互联网上搜索了几个小时,没找到相关的东西。
我们以此为例:
Pool
使用#!/opt/perforce/bin/python/3.4.2/bin/python3
import multiprocessing
import sys
def run(i):
print(i)
sys.exit(1)
iteration = ['test1', 'test2', 'test3']
with multiprocessing.Pool(1) as pool:
pool.map(run, iteration)
print("reached here ?")
,从未到达打印件,sys.exit()
由于某些原因挂起了块。在我的真实脚本中,当我发现某种错误时添加了pool.map
。我希望能够优雅地杀死一个工人(或者只是让它跳过迭代,就像休息一样)。我尝试了sys.exit()
,sys.exit()
甚至exit()
,但没有运气......
有可能吗?
答案 0 :(得分:0)
我建议你提出一个异常并将其捕获到可调用范围之外。像这样:
import multiprocessing
import sys
def run(i):
print(i)
if i == 'test3':
raise Exception()
iteration = ['test1', 'test2', 'test3']
with multiprocessing.Pool(1) as pool:
try:
result = pool.map(run, iteration)
except Exception:
sys.exit(1)
print("reached here ?")