Как закрыть курсор в MongoKit - PullRequest
6 голосов
/ 22 марта 2011

Я использую MongoKit для выполнения итерации огромного количества данных.

Во время этого процесса мой курсор становится недействительным, и я получаю

OperationFailure: cursor id '369397057360964334' not valid at server

Я прочитал в списках рассылки, что могу передавать параметр timeout=False методу .find(), но FAQ по PyMongo говорит, что я сам позабочусь о том, чтобы закрыть курсор.

Но я не нашел методов в MongoKit для этого.

Нужно ли закрывать курсор рукой, и если да - как я могу это сделать?

1 Ответ

9 голосов
/ 22 марта 2011

Вам придется закрыть курсор, поскольку сервер MongoDB не будет устанавливать для вас время ожидания курсора, учитывая, что вы специально просили его не делать этого.

просто наберите del на вашем курсоре. Реализация pymongo по умолчанию для __del__ уведомит сервер об уничтожении курсора.

Предполагая что-то вроде:

cursor = db.test.find(timeout=False)

Просто сделайте это, когда закончите:

del cursor
...