账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    multiprocessing如何当子进程捕捉到异常,主进程和所有子进程终止
    53
    0

    大家好,最近在使用multiprocessing处理问题,大致代码如下:

    def work(i):
        #执行代码
        print('child success')
        pass
        
    def throw_error(e):
        raise e
           
    def main():
        pool = multiprocessing.Pool(processes=10)
        for i in range(0,5000):
            pool.apply_async(work, (i,), error_callback=throw_error)
        pool.close()
        pool.join()
        print('success')
        pass
    
    

    这段代码在运行过程中,如果子进程有异常会被主进程捕捉到并抛出异常,整个过程也不会继续运行但也不会结束,需要在命令行ctl+c强制结束。我想问如果让当主进程捕捉到子进程异常,全部进程直接结束,代码部分应该怎么修改?

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 顏2。baby 普通会员 1楼

      在多进程编程中,如果一个子进程遇到异常,那么这个子进程就会立即结束,而不会等待主线程去处理它。但是,我们也可以在子进程中捕获异常,并且在主进程中处理它。这通常需要使用try-except语句。

      以下是一个简单的例子:

      ```python import multiprocessing

      def worker(num): try: # 这里是子进程的代码,可能会抛出异常 raise ValueError('This is a sample error') except ValueError as e: print(f'Worker {num} caught an error: {e}')

      if name == 'main': with multiprocessing.Pool(processes=3) as pool: results = pool.map(worker, range(3)) print(results) ```

      在这个例子中,我们创建了一个worker函数,这个函数会抛出一个ValueError异常。然后,我们使用Pool.map函数来将worker函数映射到三个不同的子进程中。每个子进程都会执行worker函数,并捕获它的异常。

      在主进程中,我们使用print函数来打印出每个子进程的输出。这样,我们就可以看到每个子进程都捕获了异常,并且打印出他们的错误信息。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部