2013-10-25 44 views
3

Snow并行计算结束后是否需要删除导出的变量?我发现即使调用了clusterEvalQ,'rsession'进程的内存也没有太大变化。我怀疑是我的示例代码如下Snow结束后是否需要删除导出的变量

library(snow) 
cl2 <- makeCluster(3, type = "SOCK") 
data <- rep(1:10000,10000) 

clusterExport(cl2,"data") 

# is remove neccssary? 
clusterEvalQ(cl2, rm(data, pos=globalenv())) 

stopCluster(cl2) 

enter image description here

+2

尝试调用'gc'。看起来像'clusterExport'正在制作出口数据的额外副本。如果您要停止群集,我认为不需要移除。 – mrip

回答

1

去除集群工人导出的数据将释放的集群存储的工人一些内存的问题,但它不确实的主进程释放内存,这是你的本地R会话。如果你要在不需要数据的集群上做更多的工作,这可能会非常有用,但如果你只是要停止集群,那么没有真正的指向。

当您调用clusterExport时,主进程上的内存使用量可能会增加很多,因为它必须序列化所有导出的对象,但它不保留对该内存的任何引用,所以它最终应该全部释放垃圾收集。没有什么是你必须要做的,但我同意mrip,如果你想早点释放它,你可以拨打gc。我不相信你的示例代码有任何问题。