0

foreach と doRedis を使用する場合、doRedis ワーカーは、処理を開始する前に、すべてのジョブが redis サーバーに到達するまで待機します。すべての前処理が完了する前にそれらを開始することは可能ですか?

私はうまく機能しているイテレータを使用しています-前処理は「ジャストインタイム」に行われ、イテレータが実行されるとジョブデータがサーバーにヒットし始めます。ただし、ワーカーはすべてのジョブがアップロードされるまで待機するだけなので、この動作を利用することはできないようです。

コード例:

library(foreach)
library(doRedis)

registerDoRedis("worklist", "0.0.0.0")

foreach (var = complex.iter(1:1E6)) %dopar% {
    process.function(var)
    }

この例complex.iterでは時間がかかり、反復する要素が多数あります。process.function()そのため、すべての前処理が完了する前にワーカーが実行を開始できれば素晴らしいことです。complex.iter残念ながら、すべての要素で実行されるまで待機しているようです。

を設定し.inorder=Fました。

この望ましい動作を達成する方法に関する提案はありますか? ありがとう。

4

2 に答える 2

0

他の人が同じ質問をしている場合:

現時点では答えはノーです。イテレーターは、ジョブをアップロードしてワーカーに配布する前に、すべてのタスク データの集計を完了します。ここでの関連する議論: https://github.com/bwlewis/doRedis/issues/39

データがアップロードされる前にイテレータが完了していたという点でも、私の質問は間違っていました。それでも、アップロードをブロックすると、ワーカーはイテレータが終了するまでだけでなく、アップロードが完了するまで待機することになります。

変更を実装した場合は、回答を更新します。

于 2016-08-09T19:41:27.843 に答える