この質問はhereから派生しています。
Python オブジェクト ( l1
、l2
およびl3
) を含む 3 つの大きなリストがあります。これらのリストは、プログラムの起動時に作成され、合計 16 GB の RAM を使用します。このプログラムは Linux でのみ使用されます。
これらのリストまたはこれらのリスト内のオブジェクトは、作成後に何らかの方法または形式で変更する必要はありません。プログラムが終了するまで、それらはメモリに残っている必要があります。
プログラムで os.fork() と multiprocessing モジュールを使用して、複数のサブプロセス (現在は最大 20) を生成しています。l1
これらの各サブプロセスは、3 つのリスト ( 、l2
および)を読み取ることができる必要がありますl3
。
それ以外の場合、私のプログラムは正常に動作し、非常に高速です。ただし、メモリ消費に問題があります。Linux のコピー オン ライト アプローチにより、各サブプロセスが 3 つのリストをメモリにコピーせずに使用できることを期待していました。ただし、これらのリストのいずれかのオブジェクトを参照すると、関連する参照カウントが増加し、メモリのページ全体がコピーされるため、これは当てはまりません。
だから私の質問は次のようになります:
l1
、l2
およびl3
これらのリスト内のすべてのオブジェクトの参照カウントを無効にすることはできますか? 基本的に、オブジェクト全体 (参照カウントなどのメタデータを含む) を読み取り専用にして、いかなる状況でも変更されないようにします (これにより、コピーオンライトを利用できると思います)。
現在、私は現在必要のない「機能」(参照カウント)のために、このタスクを達成するために別のプログラミング言語に移動することを余儀なくされているのではないかと心配していますが、それでも私に強制され、不必要な問題を引き起こしています。