在使用python的multiprocess库时,如果在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中抛出异常,则子进程无法退出。 (1)errorcallback中抛出异常
import multiprocessing
import os
import time
import traceback
def work(args):
try:
time.sleep(1)
print(os.get_pid())
except Exception as e:
# 子进程报错
a += 1
print(traceback.format_exc(3))
def callback(args):
print(args)
def errorcallback(args):
# 处理子进程错误的函数报错
a = 1/0
print(args)
def task():
pool = multiprocessing.Pool(processes=2)
for i in range(10):
res = pool.apply_async(work,args=(i,),callback=callback,error_callback=errorcallback)
# for r in res.get():
# print(r)
pool.close()
pool.join()
task()
运行时:
(2)解决办法 在errorcallback中使用try…except…
import traceback
def errorcallback(args):
try:
a = 1/0
print(args)
except:
print(traceback.format_exc(3))
(3) 总结 在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中使用try…except …去保证其一定能运行成功,避免子进程阻塞等待。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有