2017-07-13 28 views
1

foreachとかなり長い並列処理を行うにはdoParallelを使用しています。多くの例ではなく、計算量が多いが入力ライトのコードがループに入力される場合は、foreachを使用して多数の大きな独立したデータセットの同時処理を調整しています。ループの内部では、ディスクからファイルを読み込み、操作したり、書き戻したりするためにメタデータを使用しています。foreachループ内で標準出力が受信されない

この操作をforeachループに変える前に、私はmessages()を使ってデバッグメッセージを書き出していました。しかし、私はforeach%dopar%を使用するように切り替えたので、私はループが「暗くなる」ことに気がつきました。それはすべきことをしていますが、出力はありません。 (私はこのループが、私はRscriptとシェルから呼んでいるスクリプトに書かれていることを言及する必要があります。)

私は、これはdoParallelが他のスレッド-多分それらをオフにスピンという事実とは何かを持っていることを推測していますスレッドは標準出力をダンプする場所をもはや知りません。思考?

+1

私はパラレルコンピューティングの天才ではありませんが、Rのソケットタイプのクラスタは、ジョブが終了して出力を返すまで、出力(例:プログレスバー、メッセージなど)を返さないことは間違いありません。私はフォーク型のクラスターを使ったことがないので、この制限を回避するかどうかはわかりません。私は過去に数回プログレスバーを欲しがっていましたが、並列プロセスの数が少ない場合は回避策があります:ジョブごとに別々の並列化されていないコードを記述し、 R @ –

+0

@JacobSocolar Oof、that _is_ desperate;)私はこれをPBS経由で非忌避的に実行し、シェルからのエラーメッセージと警告メッセージがログに記録されていることがわかりました(この処理の一部は 'system( ) 'を使って他のツールを呼び出すことはできますが、Rの' message() 'には出力されません。私は別の絶望的な答えが 'system("私の更新をエコーする ")... – rensa

答えて

1

並列foreachループから出力したい場合は、outfileのようにthis codeのようなオプションを使用してください。

+0

私は私の実行から戻ってくるときにテストしますが、これはまさに私が必要なもののように聞こえます:) – rensa

関連する問題