マルチプロセスの子プロセスからグローバル変数を更新し、親プロセスからアクセスできるようにするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-06 15:08:02
オリジナル
373 人が閲覧しました

How do I update global variables from child processes in multiprocessing and ensure they are accessible by the parent process?

マルチプロセスのグローバル変数の更新が親に返されない

マルチプロセスを利用して二次プロセスを確立すると、独自の Python インスタンスが作成されます世界的な状態。このグローバル状態は分離されており、子プロセスによってグローバル変数に加えられた変更は親プロセスからは見えなくなります。

さらに、マルチプロセッシング抽象化の大部分はデータ転送に pickle を利用します。プロキシ経由で伝達されるすべてのデータは、マネージャーによって提供されるすべてのオブジェクトを含め、ピクル可能である必要があります。 「マネージャー」セクションでは、他のプロセスがプロキシを使用して共有オブジェクトにアクセスできることを強調しています。

同様の制限がキューにも適用されますが、ドキュメントではこの情報が省略されています。簡単なテストにより、キュー内のすべてのデータも pickle 可能でなければならないことが確認されています。

データを pickle 化できない場合は、データを ctype オブジェクトとして保存し、メモリ参照を子プロセスに渡すことを検討してください。このアプローチは多少リスクがあり、他のオプションが使い果たされた状況のために取っておく必要があります。

あなたの場合、LORR の複雑さを理解することが重要です。 Python クラスの場合は、そこからサブクラス化し、setstate メソッドと getstate メソッドを定義すると、ピクルスが容易になる可能性があります。

または、LORR インスタンスから必要なデータを抽出して渡すこともできます。単純な文字列だけで十分かもしれません。上の図に示すように、キューを利用してメイン プロセスと子プロセスの間でメッセージを送信し、オブジェクト メソッドを直接呼び出すことを検討してください。

以上がマルチプロセスの子プロセスからグローバル変数を更新し、親プロセスからアクセスできるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート