Python 缓存列表

3 投票
2 回答
2221 浏览
提问于 2025-04-16 01:38

我有一个模块,可以用公司标准的接口来创建地理对象。创建完这些对象后,会调用 update_db() 方法,把所有对象更新到数据库里。

为了在更新生产数据库之前保持计数器和统计数据,所有对象必须在一个会话中插入。

问题是,有时候对象太多了,内存会满。

有没有办法在Python中创建一个缓存列表,以处理那些装不下的列表呢?

我大致的想法是:

class CachedList(object):
    def __init__(self, max_memory_size, directory)
    def get_item(index)
    def set_item(index)
    def del_item(index)
    def append(item)

在初始化时会创建一个普通的列表。当列表的大小超过 max_memory_size 时,列表里的元素会被“打包”(pickled)并存储到 directory 里的一个文件中。get_item()set_item()del_item() 方法会处理存储在内存中的数据,或者从磁盘“交换”数据以便访问。

  1. 这个设计好吗?有没有什么标准的替代方案?
  2. 我该如何在对列表的部分数据进行“打包”后强制进行垃圾回收?

谢谢,

亚当

2 个回答

2

我觉得你的第一个问题已经回答了。关于第二个问题,强制进行垃圾回收的话,可以使用 gc.collect。你可以在这里查看详细信息:http://docs.python.org/library/gc.html

5

使用 shelve。你的键就是你列表中的索引。

撰写回答