Python のマルチプロセッシング モジュールを使用して、複数のマシンで分散タスクを実行しようとしています。このブログ投稿を参考にしています。
ただし、この投稿のタスクはジョブ キューを使用し、結果を結果キューに入れます。どちらも JobQueueManager (SyncManager のサブクラス) によって管理されます。このマネージャにはサーバーがあり、 を呼び出したときに結果キューがいっぱいになるまで起動し、継続的に実行されますmanager.shutdown()
。
私の問題は、私のタスクが結果キューを必要としないことです。そのため、サーバーをいつ停止するかを知る方法を見つけようとしています。でサーバーを継続的に実行してserve_forever
から手動で停止するか、例と同じようにいっぱいになるダミー キューを作成し、元のジョブ数と同じ数になるとサーバーを停止することができます。
手動で停止したくないのですが、2 番目の解決策はややハックなようです。(サーバーなしで)一般的な方法の1つは、各プロセスで呼び出すjoin()
ことですが、マネージャーが各ジョブをキューから削除したプロセスを見つける方法があるかどうかはわかりません。
私のフォールバック プランはダミー キュー メソッドの変形ですが、各プロセスの最後のステップとしてインクリメントされる共有カウンター変数を使用しますが、マルチプロセッシング ライブラリのメソッドを使用する提案があるかどうか、またはこれは信頼できません。
ありがとう
編集:結果キューを使用しない理由は、処理の結果をRedisデータベースに保存しているためだとは言いませんでした。