CursorNotFound: cursor id '8770545284945729938' not valid at server

You’re getting this error because the cursor is timing out on the server (after 10 minutes of inactivity).

From the pymongo documentation:

Cursors in MongoDB can timeout on the server if they’ve been open for a long time without any operations being performed on them. This can lead to an CursorNotFound exception being raised when attempting to iterate the cursor.

Limits the number of documents returned in one batch. Each batch requires a round trip to the server. It can be adjusted to optimize performance and limit data transfer.

When you call the collection.find method it queries a collection and it returns a cursor to the documents. To get the documents you iterate the cursor. When you iterate over the cursor the driver is actually making requests to the MongoDB server to fetch more data from the server. The amount of data returned in each request is set by the batch_size() method.

The last resort will be that you set timeout=False. But you need to be sure that the cursor is closed after you finish processing the data.

pymongo

cursor=db.images.find({}, {'id':1, 'image_path':1, '_id':0}, no_cursor_timeout=True)
for i in cursor:
    # .....
    # .....
cursor.close() # use this or cursor keeps waiting so ur resources are used up

mongoengine

cursor = Users.objects.timeout(False)
del cursor

备注:del是python的删除引用用法。

参考
1.https://stackoverflow.com/questions/24199729/pymongo-errors-cursornotfound-cursor-id-not-valid-at-server
2.http://api.mongodb.com/python/current/api/pymongo/cursor.html

猜你喜欢

转载自blog.csdn.net/yangyangrenren/article/details/91129889