Python 仅当可用的可用内存太少时才清空内存

Python 仅当可用的可用内存太少时才清空内存,python,caching,memory,garbage-collection,Python,Caching,Memory,Garbage Collection,按A键时,我正在内存中加载约400 MB的声音数据(例如:加载钢琴样本) 按B键时,另一个预设将加载另一个400 MB(例如:小提琴预设)。按C键(比如小号预设)时的Idem等 请注意,在一个特定的时间只播放一种乐器,所以基本上当C加载时,我们不再需要a、B、D、E等 但是只要有足够的空闲内存,我想将A,B,C,…,Z保存在内存中,这样如果我从C快速切换到A,数据仍然在内存中。。。所以我不需要等待数据加载 但是因为记忆不是无限的,我希望如果我们接近完整的记忆,最古老的东西会被抹去。类似于垃圾收集

按A键时,我正在内存中加载约400 MB的声音数据(例如:加载钢琴样本)

按B键时,另一个预设将加载另一个400 MB(例如:小提琴预设)。按C键(比如小号预设)时的Idem等

请注意,在一个特定的时间只播放一种乐器,所以基本上当C加载时,我们不再需要a、B、D、E等

但是只要有足够的空闲内存,我想将A,B,C,…,Z保存在内存中,这样如果我从C快速切换到A,数据仍然在内存中。。。所以我不需要等待数据加载

但是因为记忆不是无限的,我希望如果我们接近完整的记忆,最古老的东西会被抹去。类似于垃圾收集器,但只有在可用的可用内存很少时才会清空垃圾箱

我应该自己处理吗,像这样:

presets_in_memory = []

def button_press_callback(key):
     if key == A:
         presets_in_memory.append(Preset(1))
     if key == B:
         presets_in_memory.append(Preset(2))
     ...
     while (FreeMemory() < 100 000 000):
         del presets_in_memory[0]      # empties the oldest objects while free mem < 100MB
                                       # so that the garbage collector
                                       # will free their memory
presets_in_memory=[]
def按钮按下回调键(键):
如果键==A:
在内存中预设。追加(预设(1))
如果键==B:
在内存中预设。追加(预设(2))
...
而(FreeMemory()<100000):
del presets_in_memory[0]#在空闲内存<100MB时清空最旧的对象
#这样垃圾收集器
#将释放他们的记忆

或者让另一个系统/模块为我做这件事?

您是否尝试过导入gc(垃圾收集)并在需要时手动释放内存?@hr以及如何在这种情况下使用它,以及如何告诉
gc
保留哪一个,不保留哪一个,什么时候删除它们?也许你应该看看这里,想一想我会让操作系统来处理这个问题。只要有足够的内存,它就应该缓存文件。