我对mongoengine(python)有内存问题。在
假设我有大量的自定义文档(几千个)。
我想把它们都处理成这样:
for item in custom_documents.objects():
process(item)
问题是custom_documents.objects()
加载内存中的每个对象,而我的应用程序使用了几个GB。。。在
我该怎么做才能让它更具记忆性呢?
有没有办法让mongoengine懒洋洋地查询数据库(当我们在queryset上迭代时它会请求对象)?在
Tags:
根据docs(和我的经验),集合.objects返回lazy
QuerySet
。您的第一个问题可能是调用了objects
属性,而不是仅仅将其用作iterable。我觉得你的应用程序使用这么多内存肯定还有其他原因,也许process(object)
以某种方式存储了对它的引用?请尝试以下代码并检查应用程序的内存使用情况:由于
QuerySets
是懒惰的,您也可以做类似custom_documents.limit(100).skip(500)
的操作,以便只返回对象500-600。在我想您应该看看querysets—这是MongoEngine游标包装器:
http://mongoengine.org/docs/v0.4/apireference.html#querying
它们允许您控制返回的对象的数量,基本上负责批处理大小设置等,这些设置可以直接在pymongo驱动程序中设置:
http://api.mongodb.org/python/current/api/pymongo/cursor.html
默认情况下,游标通常是这样设置的,您必须尝试让它们一次性返回所有内容,即使在本机mongodb shell中也是如此。在
相关问题 更多 >
编程相关推荐