Как избежать объединения данных в памяти.Когда перебирать объект курсора в пимонго? - PullRequest
0 голосов
/ 21 декабря 2010

Как избежать объединения данных в памяти.Когда повторять объект курсора в 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 голосов
/ 02 июня 2014

Посмотрите на метод курсора block_size.С его помощью вы сможете установить, сколько вы читаете заранее.Я должен сказать, потому что сейчас я сталкиваюсь с некоторыми проблемами ( Получение исключения StopItered в следующем (курсор) при изменении batch_size в pymongo ), но я, вероятно, совершаю ошибкуblock_size должен решить вашу проблему.

0 голосов
/ 21 декабря 2010

Знаете ли вы, возможно ли это? Если c.db.media.find () возвращает все вместо итератора, я не уверен, что вы многое можете сделать.

...