【发布时间】:2011-04-23 14:24:27
【问题描述】:
我正在使用 RPostgreSQL 连接到本地数据库。该设置在我的 Linux 机器上运行良好。 R 2.11.1,Postgres 8.4。
我正在使用带有多核 (doMC) 并行后端的“foreach”来包装一些重复查询(编号为几千)并将结果附加到数据结构中。奇怪的是,如果我使用 %do% 则它可以工作,但当我切换到 %dopar% 时它会失败,但只有一次迭代时例外(如下所示)
我想知道它是否与单个连接对象有关,因此我创建了 10 个连接对象,并根据“i”是什么,为该查询提供了某个 con 对象,具体取决于 i 模 10。(表示下面只有 2 个连接对象)。评估 eval(expr.01) 的表达式包含/是取决于“i”是什么的查询。
我无法理解这些特定的错误消息。我想知道是否有任何方法可以使这项工作。
谢谢。
Vishal Belsare
R sn-p 如下:
> id.qed2.foreach <- foreach(i = 1588:1588, .inorder=FALSE) %dopar% {
+ if (i %% 2 == 0) {con <- con0};
+ if (i %% 2 == 1) {con <- con1};
+ fetch(dbSendQuery(con,eval(expr.01)),n=-1)$idreuters};
> id.qed2.foreach
[[1]]
[1] 411 414 2140 2406 4490 4507 4519 4570 4571 4572 4703 4731
[109] 48765 84312 91797
> id.qed2.foreach <- foreach(i = 1588:1589, .inorder=FALSE) %dopar% {
+ if (i %% 2 == 0) {con <- con0};
+ if (i %% 2 == 1) {con <- con1};
+ fetch(dbSendQuery(con,eval(expr.01)),n=-1)$idreuters};
Error in stop(paste("expired", class(con))) :
no function to return from, jumping to top level
Error in stop(paste("expired", class(con))) :
no function to return from, jumping to top level
Error in { :
task 1 failed - "error in evaluating the argument 'res' in selecting a method for function 'fetch'"
>
编辑:我改变了一些东西,(仍然不成功),但有一些事情浮出水面。在循环中建立的连接对象,而不是通过 dbDisconnect '断开',导致连接挂起,如 Postgres 的 /var/log 所示。执行此操作时会显示一些新的错误消息:
> system.time(
+ id.qed2.foreach <- foreach(i = 1588:1590, .inorder=FALSE,
.packages=c("DBI", "RPostgreSQL")) %dopar% {drv0 <- dbDriver("PostgreSQL");
con0 <- dbConnect(drv0, dbname='nseindia');
list(idreuters=fetch(dbSendQuery(con0,eval(expr.01)),n=-1)$idreuters);
dbDisconnect(con0)})
Error in postgresqlExecStatement(conn, statement, ...) :
no function to return from, jumping to top level
Error in postgresqlExecStatement(conn, statement, ...) :
no function to return from, jumping to top level
Error in postgresqlExecStatement(conn, statement, ...) :
no function to return from, jumping to top level
Error in { :
task 1 failed - "error in evaluating the argument 'res' in selecting a method for function 'fetch'"
【问题讨论】:
-
如果您解决了,请将您的解决方案作为答案发布在下面并标记为已接受。对以后的参考很有用。
标签: postgresql r foreach parallel-processing