我在远程Linux服务器上运行R并遇到并行代码导致程序冻结(无错误消息)的问题。我发布了一些玩具代码,可以复制下面的问题。相同的代码在家里的PC上运行正常(<1秒),所以我对如何调试感到茫然。
即使不清楚问题是什么,任何有关调试的建议都非常有用。谢谢!
# Prelims
library(stringdist)
library(doParallel)
rm(list = ls())
cat("\014")
# Start parallel
registerDoParallel(cores=2)
# Works
cat("Test #1","\n")
foreach (i=1:2, .packages="stringdist") %dopar% {
cat(stringdist("JOHN","JAHN",method="jaccard",q=2),"\n")
}
# Works
cat("Test #2","\n")
foreach (i=1:2, .packages="stringdist") %do% {
cat(stringdist("JOHN",c("JAHN","DJIN"),method="jaccard",q=2),"\n")
}
# Doesn't work -- spawns two workers and freezes
cat("Test #3","\n")
test<-foreach (i=1:2, .packages="stringdist") %dopar% {
cat(i,"\n")
stringdist("JOHN",c("JAHN","DJIN"),method="jaccard",q=2)
}
stopImplicitCluster()
输出/结果:
答案 0 :(得分:0)
只有部分解决方案,但仔细观察我发现“stringdist”已经使用了多个线程。这种“嵌套并行”方面似乎在Linux服务器设置中引起了问题,虽然并非总是而且不在我的家用PC上[不知道为什么]。
将“nthread = 1”设置为stringdist选项允许我使用并行foreach。