3

我有一堆需要并行完成的计算。在这个计算中,数据库是通过一个全局通道访问的。所以它是这样的:

library(doMC)
registerDoMC(2)
channel <<- connect_to_database()
results <- foreach(i=indexes) %dopar% {
    data <- get_data_from_db(channel)
    result <- do_computations(data)
}

但是他们我得到了这个错误:

task 1 failed - "cannot open the connection"

原因很可能是因为线程同时访问通道。有没有办法在 get_data_from_db 周围放置一个互斥锁?或者创建更多连接并在访问之前检查是否有免费连接?有什么建议么?

非常感谢!

---------------编辑-------------- 现在我正在为每个索引创建一个连接。但我现在收到此错误:

task 1 failed - "expired MySQLConnection"

library(doMC)
registerDoMC(2)
channel<<-list()
for(i=indexes){
   channel[[i]] <-connect_to_database(...)
}

results <- foreach(i=indexes) %dopar% {
    data <- get_data_from_db(channel[[ind]])
    result <- do_computations(data)
}
4

0 回答 0