我正在尝试查询我的数据库很多次,并为查询的结果集激活一些逻辑。
为此,我使用的是Roracle
和dopar
(顺便说一句,我的第一次尝试是使用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)
任何帮助将不胜感激!