並行して実行する必要がある計算がたくさんあります。この計算では、データベースは 1 つのグローバル チャネルを介してアクセスされます。したがって、次のようなものです。
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 にミューテックスを配置する方法はありますか? または、さらに接続を作成して、アクセスする前に空いている接続があるかどうかを確認しますか? 助言がありますか?
どうもありがとう!
---------------編集-------------- 各インデックスに対して 1 つの接続を作成しています。しかし、私は今このエラーが発生しています:
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)
}