マルチプロセッシングでは、親プロセスと子プロセスの間でキューを共有することが、通信と結果の取得に不可欠です。ただし、apply_async を使用して非同期ワーカー プロセスを開始すると、キューの共有に問題が生じます。
「キュー オブジェクトは継承を通じてプロセス間でのみ共有する必要があります」エラーを克服するには、multiprocessing.Manager を利用できます。このマネージャー クラスを使用すると、キューなどの共有リソースの作成と管理が可能になります。
キューの作成を multiprocessing.Manager() コンテキスト内に含めることで、すべてのワーカーがキューにアクセスできるようにすることができます。コードを変更する方法は次のとおりです:
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
m = multiprocessing.Manager()
q = m.Queue()
workers = pool.apply_async(worker, (33, q))
これで、各ワーカーは共有 q オブジェクトと対話し、結果を基本プロセスに報告できるようになります。このアプローチにより、apply_async.
の非同期の性質を維持しながら、効率的で信頼性の高い結果通信が可能になります。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3