- 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强制结束。我想问如果让当主进程捕捉到子进程异常,全部进程直接结束,代码部分应该怎么修改?
- 共 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函数来打印出每个子进程的输出。这样,我们就可以看到每个子进程都捕获了异常,并且打印出他们的错误信息。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
