マルチプロセッシングにおける共有メモリ オブジェクト
Python のマルチプロセッシング ライブラリでは、複数のプロセス間で大きな読み取り専用配列を同時に共有するという課題に直面します。
Fork() セマンティクスの使用
オペレーティング システムがコピーオンライト fork() セマンティクスを使用している場合 (Unix など)、読み取り専用データ構造は追加のメモリを消費することなく、すべての子プロセスにアクセスできるようになります。これは、fork() がコピーオンライト操作を作成するため、あるプロセスによるデータ構造への変更はそのプロセス自身のメモリ空間にのみ書き込まれ、他のプロセスには元のデータ構造がそのまま残されるためです。
配列を共有メモリにパッキングする
効率を高めるために、配列を NumPy または配列構造に変換し、共有メモリに保存します。それを囲む multiprocessing.Array ラッパーを作成し、関数に渡します。
書き込み可能な共有オブジェクト
書き込み可能な共有オブジェクトが必要な場合は、同期またはロック メカニズムを使用します。マルチプロセッシングは 2 つのメソッドを提供します:
Manager プロキシのアプローチは任意の Python オブジェクトを処理できますが、プロセス間通信に伴うオブジェクトのシリアル化と逆シリアル化のため速度が遅くなります。
代替アプローチ
マルチプロセッシング以外にも、Python にはさまざまな並列処理ライブラリがあります。マルチプロセッシングでは適切に対処できない可能性がある特定の要件がある場合は、これらのオプションを検討してください。
以上がPython のマルチプロセッシングで複数のプロセス間で大きな読み取り専用配列を共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。