Python 多处理 - 处理子进程的异常

问题描述 投票:0回答:1
  1. 主进程负责任务调度,子进程负责任务执行。
  2. 子进程需要返回关键的进度信息,主进程获取该进度信息。
  3. 如果子进程执行过程中出现异常,主进程需要捕获并自行终止。

我想问如何使用Python来做到这一点?也许通过

multiprocessing
模块或
multiprocessing.Pool

提前感谢您的回答。

python multiprocessing python-multiprocessing
1个回答
0
投票

您可以使用

concurrent.futures
来完成此操作。当您获取 future 的值时,如果子线程/进程出现异常,则会在获取 future 结果的线程中引发异常。

我在下面使用了

ProcessPoolExecutor
,但
ThreadPoolExecutor
也有效。您可以捕获异常并继续处理,如下所示:

import concurrent.futures
import time

def task(n):
    if n == 5:
        raise ValueError('5 exception')
    else:
        time.sleep(2)
    return n

if __name__ == '__main__':
    executor = concurrent.futures.ProcessPoolExecutor(max_workers=10)
    futures = [executor.submit(task, value) for value in range(10)]
    for future in futures:
        try:
            print(future.result())
        except ValueError as e:
            print(e)

输出:

0
1
2
3
4
5 exception
6
7
8
9
© www.soinside.com 2019 - 2024. All rights reserved.