如何在pymongo中遍历游标对象时避免数据在内存中池化?
如何避免在内存中加载数据?当在 pymongo 中遍历游标对象时该怎么做?
举个例子:
def iter():
c=pymongo.Connection()
cursor=c.db.media.find().skip(0).limit(50000)
for item in cursor:
yield item
在进入 for
循环之前,会有大约 2 分钟的延迟。它在开始遍历之前会把所有数据都加载到内存中,这样做有什么原因吗?我能否以某种方式避免这种情况?
如果我在 mongodb 的命令行中执行,这一切都没问题。
2 个回答
0
看看光标的 block_size 方法。通过这个方法,你可以设置提前读取多少数据。我说“应该”,因为我现在遇到了一些问题(在修改 pymongo 中的 batch_size 时遇到 StopIteration 异常),但我可能是哪里搞错了。block_size 应该能解决你的问题。
0
你知道这样做是否可能吗?如果 c.db.media.find() 返回的是所有内容,而不是一个一个的结果,那我不太确定你还能做些什么。