foreach Freeze / Hangup

时间:2018-06-12 21:50:56

标签: r foreach parallel-processing

我在远程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()

输出/结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

只有部分解决方案,但仔细观察我发现“stringdist”已经使用了多个线程。这种“嵌套并行”方面似乎在Linux服务器设置中引起了问题,虽然并非总是而且不在我的家用PC上[不知道为什么]。

将“nthread = 1”设置为stringdist选项允许我使用并行foreach。