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

如何在joblib多进程任务完成时立即获取并处理结果?

解决方案

你可以通过以下两种方式实现任务完成一个就即时处理结果:

方法一:使用callback回调函数

给Parallel添加callback参数,指定每个任务完成后要执行的处理函数。该函数会在主进程中被调用,接收单个任务的结果作为参数:

def handle_single_result(result):
    # 这里编写你的即时处理逻辑
    print(f"已完成任务,结果:{result}")
    # 例如:保存到数据库、更新统计指标、生成中间文件等

# 执行并行任务,同时触发回调处理
resultTuples = Parallel(n_jobs=-1, prefer="processes", callback=handle_single_result)(
    delayed(RunSingleTask)(*p) for p in run_params
)

这种方式会同时收集所有结果到resultTuples,适合需要保留全部最终结果,同时要即时处理单个结果的场景。

方法二:使用生成器模式

通过return_as="generator"参数让Parallel返回一个生成器,迭代生成器时会逐个获取已完成的任务结果,无需等待所有任务结束:

# 获取结果生成器
results_generator = Parallel(n_jobs=-1, prefer="processes", return_as="generator")(
    delayed(RunSingleTask)(*p) for p in run_params
)

# 逐个处理完成的任务结果
for result in results_generator:
    # 编写即时处理逻辑
    print(f"已完成任务,结果:{result}")
    # 例如:直接处理后丢弃,减少内存占用

这种方式不会预先缓存所有结果,内存占用更低,适合不需要保留全部结果的场景。

两种方案都基于joblib的多进程并行,完全适配你的CPU绑定任务需求,无需引入异步IO框架。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:32:07