You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查Python进程池中的已调度任务是否全部执行完成?

实现进程池任务全部完成后再执行后续代码的方法

当然有可行的实现方式啦!我结合你的代码给你分享两种常用且靠谱的方法,还会帮你修正代码里的小细节:

先修正代码的小问题

你原来的代码里,每次循环都会把futuresnan重新赋值为仅包含当前任务的列表,这样最后只能跟踪到最后一个任务。得先把所有提交的任务对象(future)收集到同一个列表里,才能监控所有任务的状态:

import concurrent.futures

executornan = concurrent.futures.ProcessPoolExecutor(20)
futuresnan = []  # 初始化空列表存储所有任务的future对象
for l, ch in enumerate(chunks):
    print("CHUNK NUMBER", l)
    print("CHUNKS", ch)
    # 把每个submit返回的future添加到列表中
    future = executornan.submit(locals()[configid + 5].ftptester, ch)
    futuresnan.append(future)

方法1:使用concurrent.futures.wait()等待所有任务完成

这个方法会阻塞当前线程,直到所有任务都执行完毕,还可以顺便获取每个任务的返回结果:

# 等待所有任务完成
concurrent.futures.wait(futuresnan)

# 如果需要处理每个任务的返回结果,可以遍历futuresnan
for future in futuresnan:
    try:
        result = future.result()
        # 这里可以根据需求处理结果,比如打印、存储等
        print(f"任务返回结果: {result}")
    except Exception as e:
        # 捕获任务执行过程中可能抛出的异常
        print(f"任务执行出错: {e}")

# 到这里所有任务都已完成,开始写后续代码
print("所有进程池任务执行完毕!启动后续逻辑...")

方法2:调用executor.shutdown()阻塞等待

shutdown()方法会关闭进程池,并且默认会等待所有已提交的任务执行完成(wait=True是默认参数,可省略)。这种方法更简洁,适合不需要单独处理每个任务结果的场景:

# 等待所有任务完成并关闭进程池
executornan.shutdown()  # 等价于executornan.shutdown(wait=True)

# 后续代码在这里写
print("所有进程池任务都搞定啦!开始执行后续代码...")

两种方法的区别:

  • 方法1可以在等待完成后逐个获取任务结果,还能处理任务抛出的异常;
  • 方法2更简洁,关闭进程池后无法再提交新任务,适合任务全部完成后就不再使用该进程池的场景。

内容的提问来源于stack exchange,提问作者chris1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:10:52