ホームページ  >  記事  >  バックエンド開発  >  マルチプロセッシングで複数の非同期ワーカー プロセス間でキューを共有するにはどうすればよいですか?

マルチプロセッシングで複数の非同期ワーカー プロセス間でキューを共有するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-19 18:42:02873ブラウズ

How to Share a Queue Between Multiple Asynchronous Worker Processes in Multiprocessing?

複数のプロセス間での結果の共有

マルチプロセッシングでは、異なるプロセス間でキューなどのリソースを共有することが課題となる場合があります。この記事では、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。