并行会话仍在工作时,进程变为僵尸

时间:2018-06-25 08:17:15

标签: r parallel-processing doparallel

我正在尝试查询我的数据库很多次,并为查询的结果集激活一些逻辑。
为此,我使用的是Roracledopar(顺便说一句,我的第一次尝试是使用RJDBC,但是我切换到Roracle是因为遇到了 Error从连接读取; 现在,我不再遇到此错误,但是我遇到了下面描述的问题。

问题在于在并行会话期间,大多数进程都快死了(成为僵尸)。我在Linux系统上使用top命令对此进行了监视;该日志文件向我显示了并行循环的进度;在会话期间监控我的数据库。当我启动程序时,我看到工作程序已加载并且程序以高速度运行,但是随后大多数人死亡了,程序变得缓慢(或根本无法工作),并且没有错误消息。

以下是我要执行的操作的示例代码:

library(doParallel)
library(Roracle)

temp <- function(i) {

 # because you can't get access to my DB, it's irrelevant to file the following rows(where I put three dots)- But I checked my DB connection and it works fine. 

 drv <- ...
 host <- ...
 port <- ...
 sid <- ...
 connect.string <- paste(...) 

 conn_oracle <- dbConnect(drv, username=..., password=..., dbname=connect.string)

 myData <- dbGetQuery(conn_oracle, sprintf("SELECT '%s%' FROM dual", i))
 print(i)

 dbDisconnect(conn_oracle)
}

cl <- makeCluster(10, outfile = "par_log.txt")
registerDoParallel(cl)

output <- foreach(i=1:100000, .inorder=T, .verbose=T, .combine='rbind', 
                       .packages=c('Roracle'), 
                       .export=c('temp'))
          %dopar% {temp(i)}

stopCluster(cl)

任何帮助将不胜感激!

0 个答案:

没有答案