如何为{targets}并行管道的R子进程设置--max-connections参数?
{targets}子进程连接数配置问题
R 4.4.0及以上版本新增--max-connections启动选项,可让R会话突破默认的128个连接限制。该选项目前仅支持命令行启动R时使用,RStudio暂未开放此设置。我希望在命令行运行{targets}管道时,让子进程也能使用超过128的连接数。
我创建了一个{targets}最小示例项目,其中_targets.R的目标定义如下:
list( tar_target( name = conns, command = parallelly::availableConnections() ) )
测试步骤
场景1:RStudio控制台运行
parallelly::availableConnections() # 返回128 targets::tar_destroy() # 清除历史结果 targets::tar_make() targets::tar_read(conns) # 结果仍为128
场景2:命令行启动高连接数R进程后运行{targets}
# 命令行启动支持512连接的R进程 R --max-connections=512
在该R会话中执行:
parallelly::availableConnections() # 返回512(符合预期) targets::tar_destroy() targets::tar_make() targets::tar_read(conns) # 返回128(不符合预期)
原因:{targets}会启动新的子进程执行管道,该子进程继承的是默认128连接数,而非父进程的512。
场景3:当前进程内运行{targets}(单线程)
targets::tar_destroy() targets::tar_make(callr_function = NULL) targets::tar_read(conns) # 返回512(符合预期)
但此方式为单线程执行,无法满足并行处理需求。
场景4:启用{targets}并行模式
先在_targets.R中启用并行控制器:
# controller = crew::crew_controller_local(workers = 2, seconds_idle = 60)
然后执行:
targets::tar_destroy() targets::tar_make(callr_function = NULL) targets::tar_read(conns) # 返回128
可见并行子进程继承的仍是默认128连接数。
问题
- 能否让{targets}的子进程继承父进程的连接数设置?
- 能否直接为{targets}的子进程指定最大连接数?
内容的提问来源于stack exchange,提问作者Matthew Kuperus Heun
相关产品推荐
相关产品推荐

