マルチプロセッシングでは、親プロセスと子プロセスの間でキューを共有することが、通信と結果の取得に不可欠です。ただし、apply_async を使用して非同期ワーカー プロセスを開始すると、キューの共有に問題が生じます。
「キュー オブジェクトは継承を通じてプロセス間でのみ共有されるべきである」というエラーを克服するには、multiprocessing.Manager を利用できます。このマネージャー クラスにより、キューなどの共有リソースの作成と管理が可能になります。
キューの作成を multiprocessing.Manager() コンテキスト内に含めることで、すべてのワーカーがキューにアクセスできるようにすることができます。コードを変更する方法は次のとおりです。
<code class="python">if __name__ == '__main__': pool = multiprocessing.Pool(processes=3) m = multiprocessing.Manager() q = m.Queue() workers = pool.apply_async(worker, (33, q))</code>
これで、各ワーカーは共有 q オブジェクトと対話し、結果を基本プロセスに報告できるようになります。このアプローチにより、apply_async.
の非同期の性質を維持しながら、効率的で信頼性の高い結果通信が可能になります。以上がmultiprocessing.Manager を使用して複数のプロセス間で結果キューを共有する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。