如何将future或promise的运行进度传回R主进程?
解决方案
你当前使用Windows 10 + RStudio环境,基于future的multisession策略配合promises实现异步任务,要实时上报循环进度的最简单方式是使用progressr包,它原生支持future生态的跨进程进度传递,不需要手动实现复杂的进程通信逻辑。
前置依赖安装
如果未安装对应包,先执行安装命令:
install.packages(c("progressr", "promises", "future"))
完整可运行代码
# 加载依赖 library(future) library(promises) library(progressr) # 开启全局进度处理,RStudio环境会自动弹出原生进度条 handlers(global = TRUE) # 可选配置:如果需要同时把进度打印到控制台,取消注释下一行即可 # handlers("progress", "console") # 设置并行策略 plan(multisession) # 定义异步任务 promise = future_promise({ # 创建进度上报函数,配置总步数为100 p <- progressor(steps = 100) for (i in 1:100) { Sys.sleep(1) # 上报当前进度,支持自定义展示的消息内容 p(message = paste0("当前执行到第", i, "轮"), amount = 1) } i })
效果说明
- RStudio环境下运行后会自动在界面右上角弹出进度条,实时显示当前进度消息
- 所有进度信号会自动从工作进程传递回主进程,不需要额外处理跨进程通信逻辑
- 任务结束后promise依然会正常返回100的结果,不影响原有逻辑
内容的提问来源于stack exchange,提问作者Max Yari
相关产品推荐
相关产品推荐

