如何在降雪时输出消息?

Posted

技术标签:

【中文标题】如何在降雪时输出消息?【英文标题】:How to output a message in snowfall? 【发布时间】:2012-02-10 05:46:45 【问题描述】:

我正在 Windows 7 上使用降雪包进行模拟研究。

我喜欢每 10 次运行打印一条消息到主 R 控制台以监控进度,但它没有这样做。 IE。什么都没有打印出来

任何帮助将不胜感激。

runsim = function(nsim,n,mean,var)
cov = 0
for(i in 1:nsim)
if ( i %% 10==0) 
cat("\n Running simulation",i)
dat = function1(n,mean,var)

cov = ...

cov / nsim

sfExport("function1","runsim")
sfLibrary(library1)

wrapper = function(n)
runsim(100,n,0.5,0.25)


Out<-sfLapply(1:100,wrapper)

【问题讨论】:

你可能需要sfCat @Roman:我尝试了你的建议,替换了 cat vt sfCat。我收到以下错误消息Error in checkForRemoteErrors(val) : 2 nodes produced errors; first error: could not find function "sfCat" 关于如何修复它的任何想法?谢谢 您可以尝试使用 sfLibrary 将降雪加载到工作人员中。 sfCat 是降雪的一部分,默认情况下不会将包加载到工作程序中。 @Paul 感谢您的建议。这次没有错误消息,但又没有打印任何内容 【参考方案1】:

检查?sfCat 并找到上面写着的那一行:

sfCat 是一个调试功能,在所有从属设备上打印一条消息(出现在日志文件中)。

这告诉我们,我们需要在对sfInit 的调用中启用日志记录(参数slaveOutfile)。然后,每次调用sfCat() 都会将内容转储到您指定的日志文件中。我也花了一段时间才弄清楚;-)

代码示例

if (!require("snowfall")) 
    install.packages("snowfall")
    require("snowfall")


sfInit(parallel=TRUE, cpus=4, slaveOutfile="test.txt")
sfLibrary("snowfall", character.only=TRUE)

res <- sfClusterApplyLB(1:100, function(x) 
    sfCat(paste("Iteration ", x), sep="\n")
)
sfStop()

./test.txt 的输出

[...]

Calling a snowfall function without calling 'sfInit' first or after sfStop().
'sfInit()' is called now.
snowfall 1.84 initialized: sequential execution, one CPU.

Iteration  4
Type: EXEC 
Iteration  92
Type: EXEC 
Iteration  94
Type: EXEC 
Iteration  96
Type: EXEC 
Iteration  98
Type: EXEC 
Iteration  100
ype: EXEC 
Iteration  29
Type: EXEC 
Iteration  31
Type: EXEC 
Iteration  33
Type: EXEC 
Iteration  35
Type: EXEC 
Iteration  37
Type: EXEC 
Iteration  39
Type: EXEC 
Iteration  41
Type: EXEC 
Iteration  43
Type: EXEC 
Iteration  45
Type: EXEC 
Iteration  47
Type: EXEC 
Iteration  49
Type: EXEC 
Iteration  51
Type: EXEC 
Iteration  53
Type: EXEC 
Iteration  55
Type: EXEC 
Iteration  57
Type: EXEC 
Iteration  59
Type: EXEC 
Iteration  61
Type: EXEC 
Iteration  63
Type: EXEC 
Iteration  65
Type: EXEC 
Iteration  67
Type: EXEC 
Iteration  69
Type: EXEC 
Iteration  71
Type: EXEC 
Iteration  73
Type: EXEC 
Iteration  75
Type: EXEC 
Iteration  77
Type: EXEC 
Iteration  79
Type: EXEC 
Iteration  81
Type: EXEC 
Iteration  83
Type: EXEC 
Iteration  85
Type: EXEC 
Iteration  87
Type: EXEC 
Iteration  89
Type: EXEC 
Iteration  91
Type: EXEC 
Iteration  93
Type: EXEC 
Iteration  95
Type: EXEC 
Iteration  97
Type: EXEC 
Iteration  99
 EXEC 
Iteration  74
Type: EXEC 
Iteration  76
Type: EXEC 
Iteration  78
Type: EXEC 
Iteration  80
Type: EXEC 
Iteration  82
Type: EXEC 
Iteration  84
Type: EXEC 
Iteration  86
Type: EXEC 
Iteration  88
Type: EXEC 
Iteration  90

自己的问题

有没有人知道如何“控制”进入日志文件的具体内容? 例如,最好包含有关哪个工人完成了哪个工作等的信息。

【讨论】:

snowfall 和 doSnow 有什么区别? 我找到了函数Sys.getpid(),我将其输出附加到sfCat 以识别工人。例如:sfCat(Sys.getpid(), msg)

以上是关于如何在降雪时输出消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 的并行方法中使用无效的记录器进行记录?

如何使用降雪导出预定义函数?

R降雪环境问题

与降雪库并行化的结果不可重现?

R:在doParallel /降雪中制作集群挂起

R 中的 sfInit() 降雪包在 Windows 7 上挂起