モジュールのリモートマネージャ機能を使って、multiprocessing
多くのマシンに作業を分散したい。サードパーティのモジュールがあることは知っていますが、できるだけコアにこだわりたいと思っています。デスクトップ (単一マシン) の場合、multiprocessing.Pool
クラスを使用して CPU の数を制限できることはわかっていますが、リモート マネージャーについていくつか質問があります。
リモートマネージャー用に次のコードがあります。
from multiprocessing.managers import BaseManager
import Queue
queue = Queue.Queue()
class QueueManager(BaseManager): pass
QueueManager.register('get_queue', callable=lambda:queue)
m = QueueManager(address=('', 50000), authkey='abracadabra')
s = m.get_server()
s.serve_forever()
これはうまく機能し、次のコードを使用してキューにジョブを送信することもできます。
QueueManager.register('get_queue')
m = QueueManager(address=('machinename', 50000), authkey='abracadabra')
m.connect()
queue = m.get_queue()
queue.put('hello')
queue.get()
キュー内の単一のエントリを取得することもできます。
- キュー内のアイテムをどのように取得しますか? キューを繰り返し処理しようとすると、無限ループに入ります。
- ワーカーで、各マシンをマシンごとに 1 つのジョブに制限できますか?
- このメソッドは、ワーカーがジョブが存在するかどうかを調べる必要があるプル メソッドのようですが、マルチプロセッシング サーバーをトリガーできるプッシュ メソッドはありますか?