在Snow的并行计算结束后是否需要删除导出的变量?我发现即使调用了clusterEvalQ,'rsession'进程的内存也没有太大改变。我怀疑下面的示例代码存在一些内存问题
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)
答案 0 :(得分:1)
从群集工作线程中删除导出的数据将释放群集工作线程上的内存,但它不会释放主进程(即本地R会话)上的内存。如果您要在不需要该数据的集群上做更多工作,这可能非常有用,但如果您只是要停止集群,则没有真正的意义。
当您调用clusterExport
时,主进程上的内存使用可能会增加很多,因为它必须序列化所有导出的对象,但它不会保留对该内存的任何引用,因此它最终都应该被垃圾收集释放。没有什么是你必须要做的,但我同意mrip你可以打电话gc
如果你想尽快释放它。我不相信您的示例代码有任何问题。