我在这个主题上看过其他一些帖子,似乎没有一个与我遇到的问题完全相同。但是这里有:
我正在使用
并行运行一个函数 cores <- detectCores()
cl <- makeCluster(8L,outfile="output.txt")
registerDoParallel(cl)
x <- foreach(i = 1:length(y), .combine='list',.packages=c('httr','jsonlite'),
.multicombine=TRUE,.verbose=F,.inorder=F) %dopar% {function(y[i])}
这通常可行,但现在抛出错误:
序列化错误(数据,节点$ con):写入连接错误
检查output.txt文件后,我看到:
starting worker pid=11112 on localhost:11828 at 12:38:32.867
starting worker pid=10468 on localhost:11828 at 12:38:33.389
starting worker pid=4996 on localhost:11828 at 12:38:33.912
starting worker pid=3300 on localhost:11828 at 12:38:34.422
starting worker pid=10808 on localhost:11828 at 12:38:34.937
starting worker pid=5840 on localhost:11828 at 12:38:35.435
starting worker pid=8764 on localhost:11828 at 12:38:35.940
starting worker pid=7384 on localhost:11828 at 12:38:36.448
Error in unserialize(node$con) : embedded nul in string: '\0\0\0\006SYMBOL\0\004\0\t\0\0\0\003')'\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\003','\0\004\0\t\0\0\0\024SYMBOL_FUN'
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -
unserialize
Execution halted
此错误是间歇性的。内存很丰富(32GB),内存中没有其他大型R对象。并行代码中的函数从云中检索许多小的json数据对象并将它们放入R对象中 - 因此没有大型数据文件。我不知道为什么它偶尔会看到嵌入式nul并停止。
我在使用从云中提取csv文件的功能时遇到了类似的问题。到目前为止,这两个功能在R 3.3.0和R 3.4.0下运行良好。
我在Windows上使用R 3.4.1和RStudio 1.0.143。
这是我的sessionInfo
sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United
States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] RJSONIO_1.3-0 RcppBDT_0.2.3 zoo_1.8-0 data.table_1.10.4
doParallel_1.0.10 iterators_1.0.8
[7] RQuantLib_0.4.2 foreach_1.4.3 httr_1.2.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.12 lattice_0.20-35 codetools_0.2-15 grid_3.4.1
R6_2.2.2 jsonlite_1.5 tools_3.4.1
[8] compiler_3.4.1
更新
现在我又得到了一个类似的错误:
反序列化错误(节点$ con): ReadItem:未知类型100,可能由更高版本的R
编写
嵌入式的nul错误似乎已经消失了。我也尝试删除.Rhistory和.Rdata,并删除我的包子文件夹并重新加载所有pacakges。至少这个新错误似乎是一致的。我找不到“未知类型100”是什么。
答案 0 :(得分:4)
我收到类似的错误...通常在后续脚本运行时发生,当我之前的一个脚本出错或者我提前停止它时。这可能是你提到的部分:&#34;我不知道为什么它偶尔会看到嵌入式nul并停止&#34;这可能是错误。
这有一些很好的信息,特别是为了确保为常规Windows进程保留1个核心来运行。还提到&#34;如果你从这些功能中的任何一个得到错误,通常意味着至少有一个工人已经死亡&#34;这可以支持我关于错误后崩溃的理论。
doParallel error in R: Error in serialize(data, node$con) : error writing to connection
到目前为止,我的解决方案是通过再次运行来重新初始化并行后端:
registerDoParallel(cl)
它通常可以在以后工作,但我注意到我的任务管理器中的以前的多核会话不会消失,即使是:
stopCluster(cl)
这就是我有时重启R。
的原因答案 1 :(得分:3)
我还注意到多核会话不会离开任务管理器。
切换使用:stopCluster(cl)
到stopImplicitCluster()
为我工作。根据我的阅读,这应该在使用“一行”registerDoParallel(cores=x)
时使用
vs
cl<-makeCluster(x)
registerDoParallel(cl)
我的“直觉”是Windows如何处理群集需要stopImplicitCluster,但您的体验可能会有所不同。
我会评论但这是(提示乐队)我的第一次STACKOVERFLOW POST !!!