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

使用Reticulate调用joblib.Parallel时出现Python进程泄漏问题

Reticulate调用joblib.Parallel后残留Python进程及资源泄漏警告问题

问题现象

通过R的reticulate包调用使用joblib.Parallel实现并行计算的Python函数,执行完R脚本后,Python进程会残留。后续这些残留进程被终止时,会触发以下警告:

resource_tracker.py:314: UserWarning: resource_tracker: There appear to be 8 leaked semlock objects to clean up at shutdown
resource_tracker.py:314: UserWarning: resource_tracker: There appear to be 1 leaked folder objects to clean up at shutdown

复现步骤

前置依赖

  • 安装Python包:pip install joblib
  • 安装R包:在R解释器中执行 install.packages('reticulate')

代码文件

foo.R

foo <- reticulate::import("foo")
foo$run()

同目录下的foo.py

from joblib import Parallel, delayed

def calc(i):
    return i**2

def run():
    res = Parallel(n_jobs=2)(delayed(calc)(i) for i in range(10))
    print(res)

执行命令

$ Rscript foo.R

验证方式

直接运行Python脚本调用run()不会出现该问题。由于joblib不会立即终止进程,警告会延迟出现,但可通过以下命令立即查看残留Python进程数量:

ps -a | grep "python" -c

解决方案

在Python函数的Parallel调用后,添加以下代码强制关闭可复用的执行器,避免进程残留:

from joblib.externals.loky import get_reusable_executor
get_reusable_executor().shutdown(wait=True)

添加后再次执行R脚本,不会出现资源泄漏警告,也无残留进程。

额外说明

使用VS Code的运行按钮执行R脚本时,无残留进程,也不会触发警告,暂未明确该场景与直接调用Rscript foo.R或source('foo.R')的差异。

内容的提问来源于stack exchange,提问作者T. Kiley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:15:01