Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python multiprocess 子进程和主进程同时抛出异常时子进程无法退出

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

作者头像
锦小年
发布于 2021-12-08 03:50:02
发布于 2021-12-08 03:50:02
3.4K00
代码可运行
举报
文章被收录于专栏:锦小年的博客锦小年的博客
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python进程池:multiprocessing.pool
本文转至http://www.cnblogs.com/kaituorensheng/p/4465768.html,在其基础上进行了一些小小改动。
hankleo
2020/09/17
4620
Python多进程并发(multipro
 A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Queue, Value and Array. For example,
py3study
2020/01/08
5810
Python多进程编程
阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessing python 中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进 程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支
小小科
2018/05/02
1.2K0
Python多进程编程
Python并行计算系列(一)入门篇
Python是生物信息学应用中的常用编程语言,在2019年11月TIOBE 编程语言排行榜中排名第3,仅次于Java语言、C语言。
阿凡亮
2020/04/13
1.6K0
python多进程--交互
1.管道使用 ''' 管道Pipe ''' from multiprocessing import Process,Pipe def f(conn): conn.send('child message')#给主进程发送消息 conn.close() if __name__=='__main__': parent_conn,child_conn=Pipe() p=Process(target=f,args=(child_conn,)) p.start() pr
py3study
2020/01/14
5520
Python 标准类库-并发执行之multiprocessing-基于进程的并行
multiprocessing是一个支持使用类似于线程模块的API派生进程的包。该包同时提供本地和远程并发,通过使用子进程而不是线程,有效地避开了全局解释器锁。因此,multiprocessing模块允许程序员充分利用给定机器上的多个处理器。它同时在Unix和Windows上运行。
授客
2023/07/10
8850
【Python】独特的进程池概念
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程。
杨丝儿
2022/02/25
1.6K0
Python 编程 | 连载 25 - Python 多进程
对于操作系统来说,一个任务就是一个进程,进程就是程序执行的载体,如Python脚本中执行main函数就启动了一个进程,打开微信或者浏览器就是开启了一个进程,进程的运行需要资源支持,也就需要消耗CPU和内存
RiemannHypothesis
2022/09/26
3830
Python 编程 | 连载 25 - Python 多进程
44.python 进程池multiprocessing.Pool
python进程池Pool 和前面讲解的 python线程池 类似,虽然使用多进程能提高效率,但是进程的创建会消耗大量的计算机资源(进程Process的创建远远大于线程Thread创建占用的资源),线程是计算机最小的运行单位,连线程都需要使用线程池,进程有什么理由不使用进程池?
猿说编程[Python和C]
2020/03/12
2.8K0
44.python 进程池multiprocessing.Pool
python 中的进程池 -- multiprocessing.pool.Pool
上一篇文章中,我们介绍了如何通过 multiprocessing 进行多进程并发编程。 通过 multiprocessing 实现 python 多进程
用户3147702
2022/06/27
2.2K0
python 中的进程池 -- multiprocessing.pool.Pool
python-multiprocessing-Pool进程池—-多进程
进程池是用来创建和管理进程的一个池子,池子里面可以有很多的进程,它是进程工作的容器
kirin
2020/05/09
1.3K0
python标准库之MultiProcessing库的研究 (1)
MultiProcessing模块是一个优秀的类似多线程MultiThreading模块处理并发的包 之前接触过一点这个库,但是并没有深入研究,这次闲着无聊就研究了一下,算是解惑吧。 今天先研究下apply_async与map方法。传闻就是这两个方法分配进程池中的进程给相关函数,我想验证下。 看下官网对这两个的解释: apply_async(func[, args[, kwds[, callback[, error_callback]]]]) A variant of the apply() method which returns a result object.
Ryan_OVO
2023/10/18
2280
python标准库之MultiProcessing库的研究 (1)
python 之进程与线程
从系统调度和资源分配的角度来看,进程是 CPU 资源分配的最小单位,线程是 CPU 调度的最小单位。从 CPU 执行时间的角度来看,进程是包含了上下文切换的程序执行时间总和,线程是共享了进程的上下文环境的更为细小的 CPU 时间段。
keinYe
2019/08/01
4060
Python多进程之进程池
由于Python中线程封锁机制,导致Python中的多线程并不是正真意义上的多线程。当我们有并行处理需求的时候,可以采用多进程迂回地解决。
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.1K0
Python的multiprocessi
multiprocessing模块可以衍生出子进程。multiprocessing模块同时提供本地和远程的并发操作。multiprocessing模块不像threading模块那样会受到GIL全局解释器锁的限制,它使用进程代替线程。基于这样的特性,multiprocessing模块可以让程序员在一台服务器上使用多个处理器。
py3study
2020/01/15
3110
Python之进程
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据
新人小试
2018/04/12
2.4K0
Python之进程
python进程回顾
pro = multiprocessing.Process(target=入口, args=(), kwargs={})
小闫同学啊
2019/07/18
6380
A process in the process pool was terminated abruptly while the future was runni
在多线程或多进程应用程序中,通常会使用进程池来有效地管理和分发任务给多个工作进程。这样可以实现并行执行和提高性能。然而,在某些情况下,进程池中的进程可能会意外终止,导致意外行为和错误。 一个这样的场景是在未完成 future 的情况下终止进程。future 表示异步操作的结果,并用于检索工作进程执行的任务的结果。如果一个进程在 future 完成之前被终止,可能会导致各种问题。
大盘鸡拌面
2023/11/24
1.4K0
python学习笔记10.4 通过killpg杀死进程组
在实际使用多进程的过程中,希望一个子进程报错,则停止所有进程,并退出主进程。在子进程中不能使用exit()函数,它会使得主进程一直等待,程序就卡在这里了。
锦小年
2021/12/08
8990
2018年8月25日多进程编程总结
今天遇到的新单词: terminal    n终端 terminate  v结束,使终结 basic        adj基本的
武军超
2018/09/27
6260
相关推荐
python进程池:multiprocessing.pool
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档