【问题标题】:How avoid pooling data in memory. When iterate cursor object in pymongo?如何避免在内存中汇集数据。在pymongo中迭代光标对象时?
【发布时间】:2011-05-28 23:37:42
【问题描述】:

如何避免在内存中汇集数据。在 pymongo 中迭代光标对象时?

例子:

def iter():
    c=pymongo.Connection()
    cursor=c.db.media.find().skip(0).limit(50000)
    for item in cursor:
        yield item

在进入循环for 之前,会有大约 2 减的暂停。由于某种原因,它在开始迭代之前将所有数据加载到内存中。我能以某种方式避免它吗?

如果我在 mongodb shell 中执行此操作,一切正常。

【问题讨论】:

  • 为什么要将光标(可以自己迭代)包装在生成器函数中?

标签: python mongodb pymongo


【解决方案1】:

查看 cursor 的 block_size 方法。有了它,您应该能够提前设置阅读量。我说应该,因为我现在面临一些问题(Getting StopIteration exception on next(cursor) when modifying batch_size in pymongo),但我可能犯了一些错误。 block_size 应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    你知道这是否可能吗?如果 c.db.media.find() 返回所有内容而不是迭代器,我不确定你能做多少。

    【讨论】:

    • 它不会返回所有内容。它返回游标对象。
    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 2012-05-12
    • 2017-03-18
    • 1970-01-01
    • 2014-02-25
    • 2016-12-31
    • 2017-11-27
    • 2020-08-14
    相关资源
    最近更新 更多