这个问题来源于这里。
我有三个包含 python 对象(l1
和l2
)l3
的大列表。这些列表是在程序启动时创建的,它们总共占用 16GB 的 RAM。该程序将专门用于 linux。
在创建这些列表或这些列表中的对象后,我不需要以任何方式或形式对其进行修改。它们必须保留在内存中,直到程序退出。
我在我的程序中使用 os.fork() 和 multiprocessing 模块来生成多个子进程(目前最多 20 个)。这些子流程中的每一个都需要能够读取三个列表(l1
和l2
)l3
。
我的程序在其他方面运行良好且速度非常快。但是我遇到了内存消耗问题。由于 Linux 上的写时复制方法,我希望每个子进程都可以使用这三个列表而无需将它们复制到内存中。但是,情况并非如此,因为在这些列表中的任何一个中引用任何对象都会增加相关的引用计数,因此会导致整个内存页面被复制。
所以我的问题是:
我可以禁用这些列表中所有对象l1
的l2
引用计数吗?l3
基本上使整个对象(包括元数据,如引用计数)只读,这样它在任何情况下都不会被修改(我认为,这将允许我利用写时复制)。
目前我担心我被迫转向另一种编程语言来完成这项任务,因为我目前不需要的“功能”(引用计数),但仍然强加给我并导致不必要的问题。