前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python multiprocess 子进程和主进程同时抛出异常时子进程无法退出

python multiprocess 子进程和主进程同时抛出异常时子进程无法退出

作者头像
锦小年
发布2021-12-08 11:50:02
2.9K0
发布2021-12-08 11:50:02
举报
文章被收录于专栏:锦小年的博客锦小年的博客

在使用python的multiprocess库时,如果在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中抛出异常,则子进程无法退出。 (1)errorcallback中抛出异常

代码语言:javascript
复制
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…

代码语言:javascript
复制
import traceback
def errorcallback(args):
    try:
        a = 1/0
        print(args)
    except:
        print(traceback.format_exc(3))

(3) 总结 在主进程中的处理子进程的返回函数callback或者处理子进程的错误的函数errorbackerror中使用try…except …去保证其一定能运行成功,避免子进程阻塞等待。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档