複数のプロセス間での結果の共有
マルチプロセッシングでは、異なるプロセス間でキューなどのリソースを共有することが課題となる場合があります。この記事では、apply_async 関数を使用して複数の非同期ワーカー プロセス間で結果キューを共有する方法について説明します。
multiprocessing.Process を使用する提供されたサンプル コードは、継承によるプロセス間でのキュー オブジェクトの共有の制限により失敗します。この制限を克服するために、multiprocessing.Manager クラスは解決策を提供します。
multiprocessing.Manager の使用
multiprocessing.Manager は、次のようなオブジェクトを作成および管理する方法を提供します。プロセス全体で共有されます。次のコードは、Manager を使用してワーカー プロセス間でキューを共有する方法を示しています。
<code class="python">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))</code>
multiprocessing.Queue() の代わりに m.Queue() を使用することで、キューは Manager オブジェクトによって作成および管理されます。 。これにより、ワーカー プロセスは、「キュー オブジェクトは継承を通じてプロセス間でのみ共有される必要があります」エラーに直面することなく、キューにアクセスして変更できるようになります。
以上がマルチプロセッシングで複数の非同期ワーカー プロセス間でキューを共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。