首页 > 解决方案 > 进程变成僵尸,而 r 并行会话仍在工作

问题描述

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

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

这是我正在尝试做的一些示例代码:

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)

任何帮助将不胜感激!

标签: rparallel-processingdoparallel

解决方案


推荐阅读