我在远程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()输出/结果:

发布于 2018-06-13 22:22:16
只有部分解决方案,但更仔细地看,我发现"stringdist“已经使用了多个线程。这方面的“嵌套并行”似乎在Linux服务器设置中造成了问题,尽管不总是,也不是在我的家用PC上,我不确定为什么。
将"nthread=1“设置为字符串选项允许我使用并行foreach。
https://stackoverflow.com/questions/50826331
复制相似问题