【问题标题】:print logs with multicore使用多核打印日志
【发布时间】:2014-02-12 18:41:43
【问题描述】:

使用 foreach 和 doMC,有没有办法让cat 和/或message 在并行运行时打印到屏幕上?例如:

> library(foreach)
> 
> tmp <- foreach(i=1:3) %do% 
+   cat("sqrt(i) =", sqrt(i), "\n")
sqrt(i) = 1 
sqrt(i) = 1.414214 
sqrt(i) = 1.732051 

> 
> tmp <- foreach(i=1:3) %do% 
+   message("i^2 =", i^2, "\n")
i^2 =1

i^2 =4

i^2 =9

>       
> library(doMC)
> registerDoMC(2)
> 
> tmp <- foreach(i=1:3) %dopar% 
+   cat("sqrt(i) =", sqrt(i), "\n")
> 
> tmp <- foreach(i=1:3) %dopar% 
+   message("i^2 =", i^2, "\n")
>   
> sessionInfo()
R Under development (unstable) (2014-01-29 r64898)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets 
[7] methods   base     

other attached packages:
[1] doMC_1.3.2      iterators_1.0.6 foreach_1.4.1  

loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_3.1.0  tools_3.1.0    

谢谢,

最大

【问题讨论】:

    标签: r foreach parallel-processing domc


    【解决方案1】:

    默认情况下,在使用带有 doMC 后端的 foreach 时,不会重定向来自工作人员的标准输出,因此应该显示输出,除非您使用的是 GUI,例如 Mac OS X 上的 R.app 或 Windows 上的 Rgui。我刚刚在我的 Mac 上进行了快速测试,似乎 RStudio 也丢弃了由 doMC/mclapply 创建的工作人员的标准输出。

    从终端执行 R 时,我在 Mac OS X 10.7.5 上看到使用 R 3.0.2 和“R 开发中(不稳定)(2014-02-13 r64986)”的工作输出。由于您使用的是稍旧的开发版本,因此可能存在随后已修复的问题。

    您可以尝试使用特定于 doMC 的“静默”选项显式打开输出:

    > opts <- list(silent=FALSE)
    > tmp <- foreach(i=1:3, .options.multicore=opts) %dopar% message('i^2 = ', i^2)
    i^2 = 1
    i^2 = 4
    i^2 = 9
    

    这会导致使用mc.silent=FALSE 调用 mclapply。如果这没有帮助,我建议尝试适合我的最新开发版本。

    【讨论】:

    • 此解决方案似乎不再适用于在 Mac OS X 10.10.5 上运行的 R 3.2.2 (2015-08-14)。
    • @CraigW 你在执行x &lt;- mclapply(1:3, message, mc.cores=3) 时看到输出了吗?您是否从“终端”执行标准 R 解释器?
    • 我收回了。从终端运行 R 时似乎显示输出,而不是从 R.app GUI 或 RStudio 运行。有没有办法让这个解决方案在这些环境中工作?
    • @CraigW 我不知道如何在这些环境中显示标准输出、标准错误或消息。完全不建议在这些环境中使用 mclapply,因为它使用了 fork 系统调用。
    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多