R多线程数据库访问

时间:2012-08-23 14:36:19

标签: multithreading r rmysql

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

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)
}

0 个答案:

没有答案