3

並行して実行する必要がある計算がたくさんあります。この計算では、データベースは 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)
}
4

0 に答える 0