1. ホーム
  2. python

[解決済み] 複数のプロセスで結果待ち行列を共有する

2022-10-23 17:56:19

質問

のドキュメントは 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 . これが何を意味するかは理解していますし、pickling/unpicklingを要求するよりも継承したほうがいいというアドバイスも理解しています(そして、Windowsの特別な制限もすべて)。しかし、どのように を行うのでしょうか。 キューを動作する方法で渡すことができますか? 私は例を見つけることができず、いくつかの代替案を試しましたが、さまざまな方法で失敗しました。助けてください。

どのように解決するのですか?

以下の方法で試してみてください。 マルチプロセッシング・マネージャー を使ってキューを管理し、異なるワーカーからアクセスできるようにします。

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))