代码之家  ›  专栏  ›  技术社区  ›  Adam Matan

python缓存列表

  •  3
  • Adam Matan  · 技术社区  · 14 年前

    我有一个模块,它支持使用公司标准界面创建地理对象。在创建这些对象之后, 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 ,列表元素被pickle并存储在 directory . get_item() , set_item() del_item() 将处理存储在内存中的数据,或者从磁盘“交换”数据以访问它。

    1. 这是个好设计吗?有没有标准的替代品?
    2. 我怎样才能强制垃圾收集 pickle -这是清单的一部分吗?

    谢谢,

    亚当

    2 回复  |  直到 9 年前
        1
  •  4
  •   S.Lott    14 年前

    使用 shelve . 您的键是列表的索引。

        2
  •  2
  •   Aaron Altman    14 年前

    我想你的第一个问题已经回答了。第二步,强制gc:使用gc.collect。 http://docs.python.org/library/gc.html .