如何在future包创建的工作进程中输出控制台日志?
解决future工作进程日志无法实时输出的问题
方法1:通过furrr_options开启stdout转发
在future_map中传递stdout = TRUE参数,让工作进程的标准输出实时转发到主进程控制台,同时确保工作进程内的logger配置为输出到控制台:
library(future) library(logger) library(purrr) plan(multisession) worker_function <- function() { # 显式配置worker进程的日志输出到控制台 log_appender(appender_console()) log_info("Hello from a worker!") 1 } # 开启stdout转发 x <- future_map(1:2, ~ worker_function(), .options = furrr_options(stdout = TRUE)) x
方法2:改用cluster计划并设置实时输出
切换到cluster计划,通过outfile = ""参数让工作进程的日志直接实时输出到控制台:
library(future) library(logger) library(purrr) # 初始化cluster计划,指定工作进程数并开启实时输出 plan(cluster, workers = 2, outfile = "") worker_function <- function() { log_info("Hello from a worker!") 1 } x <- future_map(1:2, ~ worker_function()) x
原理说明
multisession计划默认会捕获工作进程的标准输出,仅在任务全部完成后才会展示;而开启stdout = TRUE或使用cluster计划并设置outfile = "",会让工作进程的输出直接实时转发到主进程的控制台,无需等待任务结束再统一收集日志。
内容的提问来源于stack exchange,提问作者Chechy Levas
相关产品推荐
相关产品推荐

