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

Joblib Parallel运行后不终止进程引发内存泄漏该如何解决?

针对joblib.Parallel loky后端进程残留、内存泄漏的解决方案
  • 优先使用上下文管理器调用(官方推荐方案)
    直接将Parallel逻辑包裹在with代码块中,退出块时会自动完成进程池的关闭、资源回收逻辑,无需额外手动操作:

    with Parallel(n_jobs=14) as parallel:
        grouped_data = parallel(delayed(function)(group) for group in grouped_data)
    

    该方法会完全复现multiprocessing.Pool手动close+join的效果,所有子进程会在计算完成后立刻被销毁,内存同步释放。

  • 手动调用终止方法
    如果场景不适合用上下文管理器,可以在计算完成后主动调用Parallel实例的回收接口:

    # 初始化实例
    parallel = Parallel(n_jobs=14)
    # 执行并行计算
    grouped_data = parallel(delayed(function)(group) for group in grouped_data)
    # 手动终止所有子进程释放资源
    parallel.terminate()
    # 旧版本joblib如果上述调用失效可以用底层接口:
    # parallel._backend.terminate()
    

    如果调用parallel.terminate()提示不存在该方法,可先升级joblib到最新稳定版:pip install -U joblib。

  • 配置空闲自动回收参数
    如果你需要多次复用Parallel进程池、不想每次都重建,可以给loky后端配置空闲超时阈值,子进程空闲超过指定时长后会被自动销毁:

    # idle_timeout单位为秒,这里设置空闲10秒后自动回收子进程
    parallel = Parallel(n_jobs=14, backend='loky', backend_kwargs={'idle_timeout': 10})
    # 多次调用并行任务逻辑
    # ...
    

补充说明:joblib默认保留子进程是为了复用进程池,降低后续并行任务的启动开销,如果你确定后续不需要再执行并行任务,用前两种方案主动回收即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:54:02