私がやろうとしていること: EBImageを使用してイメージのスタックを開き、それらを処理して、新しいファイルに保存します。私はこれを、パッケージ "doParallel"と "foreach"を使って並列に試みています。イメージファイルをRで並列に開く
問題:私はこのエラーのいずれかのより多くの情報を取得する方法がわからない
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
: 私は仕事のために複数のプロセッサコアを使用して任意の時間は、Rは、エラーを返します。同じスクリプトを使用しようとしたが、プロセッサコアが1つしかない場合は、何の問題もありません。
サンプルスクリプト:
library(EBImage)
library(foreach)
library(doParallel)
nCores = 1
registerDoParallel(makeCluster(nCores))
img_stack_ids = c("A", "B", "C", "D")
foreach(i = 1:384, .packages = c("EBImage")) %dopar% {
imgs = tryCatch(readImage(sprintf("/INPUT_IMGS/%s_%s, i, img_stack_ids)),
error = function(e) array(0, dim = c(0,0,0)))
img_processed = processingFunction(img_list)
writeImage(img_processed, sprintf("/OUTPUT_IMGS/%s", i))
}
nCoresは1と利用可能なコアの最大数との間には何のときnCores = 1が、そうでないときのコードが動作します。
私はこれが上で実行するシステムは、ファイルIDに基づいて、個々の労働者が独自のファイルにアクセスするべきであるCentOSの7
を実行している36コアを搭載した仮想マシンはので、私はそれが問題の画像だことはできませんされていることlinuxに同じディレクトリへの読み込みと書き込みを同時に行うことができない限り、ファイルのロックや同時読み込みがありません。
私は正直言って解決策と解決策に満足しています。
ありがとうございました!
私のセッション情報: Rバージョン3.3.1(2016年6月21日) プラットフォーム:x86_64版 - リンゴ - darwin13.4.0(64ビット) の下で実行:OS X 10.11.6(エルキャピタン)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods
base
other attached packages:
[1] doParallel_1.0.10 iterators_1.0.8 foreach_1.4.3
ZProjection_0.99.0 EBImage_4.16.0
loaded via a namespace (and not attached):
[1] locfit_1.5-9.1 lattice_0.20-34 codetools_0.2-15
png_0.1-7 fftwtools_0.9-7 tiff_0.1-5
grid_3.3.1 tools_3.3.1 jpeg_0.1-8
abind_1.4-5
[11] rsconnect_0.5 BiocGenerics_0.20.0