107

モジュールのドキュメントには、 でmultiprocessing開始されたプロセスにキューを渡す方法が示されていますmultiprocessing.Process。しかし、で開始された非同期ワーカー プロセスとキューを共有するにはどうすればよいapply_asyncでしょうか。動的結合などは必要ありません。ワーカーが結果を (繰り返し) ベースに報告する方法だけです。

import multiprocessing
def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    q = multiprocessing.Queue()
    workers = pool.apply_async(worker, (33, q))

これは失敗します: RuntimeError: Queue objects should only be shared between processes through inheritance. 私はこれが何を意味するかを理解しています。また、ピクル/アンピクル (およびすべての特別な Windows の制限) を要求するのではなく、継承するというアドバイスも理解しています。しかし、機能する方法でキューを渡すにはどうすればよいでしょうか? 例が見つかりません。さまざまな方法で失敗したいくつかの代替案を試しました。助けてください?

4

2 に答える 2

151

multiprocessing.Managerを使用してキューを管理し、さまざまなワーカーがキューにアクセスできるようにしてみてください。

import multiprocessing
def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    m = multiprocessing.Manager()
    q = m.Queue()
    workers = pool.apply_async(worker, (33, q))
于 2012-03-29T15:08:42.947 に答える