multiprocessing.Pool 捕获error

调用 pool.apply_async 后没有报错直接退出,导致我一直以为是 join 后主进程没有阻塞,直接结束导致子进程直接退出。原来是子进程的执行时有error,但是没有捕获到

 

复制代码
import multiprocessing as mp

class A:
    def __init__(self,re):
        self.re = re

def do_stuff(num):
    result = 5/(2 - num)  #Line 8
    return A(result) 

def success_handler(result:A):
    print("success",result.re)

def error_handler(e):
    print(e.__cause__)

if __name__ == '__main__':
    with mp.Pool(2) as my_pool:
        results =  [
            my_pool.apply_async(
                do_stuff, 
                args=(i,),
                callback=success_handler, 
                error_callback=error_handler
            ) 
            for i in range(3)
        ]

        try:
            for result_obj in results:
                print("result is: {}".format(result_obj.get()))
        except ZeroDivisionError as e:
            print("Oh, boy.  This is the second time I've seen this error.")
复制代码

 

posted @   feiquan  阅读(518)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。

若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
点击右上角即可分享
微信分享提示