【发布时间】:2015-09-11 07:18:07
【问题描述】:
我正在尝试设置一个并行任务,每个工作人员都需要进行数据库查询。我正在尝试为每个工作人员设置一个连接,如this question 中所示,但每次我尝试它都会返回<Expired PostgreSQLConnection:(2781,0)>,无论我注册了多少工作人员。
这是我的代码:
cl <- makeCluster(detectCores())
registerDoParallel(cl)
clusterEvalQ(cl, {
library(RPostgreSQL)
drv<-dbDriver("PostgreSQL")
con<-dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
})
如果我尝试运行我的foreach,尽管出现错误,它会以task 1 failed - "expired PostgreSQLConnection" 失败
当我进入 postgres 服务器状态时,它会显示所有已创建的活动会话。
我在与我的主 R 实例中的 postgres 交互时没有任何问题。
如果我跑步
clusterEvalQ(cl, {
library(RPostgreSQL)
drv<-dbDriver("PostgreSQL")
con<-dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
dbGetQuery(con, "select inet_client_port()")
})
然后它将返回所有客户端端口。它不会给我过期通知,但如果我尝试运行我的 foreach 命令,它将失败并出现同样的错误。
编辑:
我已经在 Ubuntu 和 2 台 Windows 计算机上尝试过,它们都给出了相同的错误。
另一个编辑:
现在 3 台 windows 电脑
【问题讨论】:
-
您能否将您的 foreach 代码也添加到帖子中?
-
@JellenVermeir 无论
foreach中的其他内容如何,它都会在任何dbGetQuery命令中失败。例如foreach(i=1:4) %dopar% dbGetQuery(con, "select * from sometable limit 1")会失败,但foreach(i=1:4) %do% dbGetQuery(con, "select * from sometable limit 1")不会失败。当我说它失败时,我的意思是我收到有关“过期 PostgreSQLConnection”的错误消息
标签: r foreach rpostgresql doparallel