您好我是使用 mongo_collection.find()从mongdb获取文档,此集合包含600k文档。在遍历400k文档后,我正在设置错误
Traceback (most recent call last):
File "mongo_opp.py", line 324, in <module>
obj.indexAnswer()
File "mongo_opp.py", line 241, in indexAnswer
for dict_result in result:
File "build/bdist.linux-x86_64/egg/pymongo/cursor.py", line 1032, in next
File "build/bdist.linux-x86_64/egg/pymongo/cursor.py", line 974, in _refresh
File "build/bdist.linux-x86_64/egg/pymongo/cursor.py", line 864, in __send_message
File "build/bdist.linux-x86_64/egg/pymongo/helpers.py", line 112, in _unpack_response
pymongo.errors.CursorNotFound: Cursor not found, cursor id: 83302133311
此问题的解决方案是设置超时参数 mongo_collection.find(timeout = False) ,我在下面的链接中找到了
设置超时参数会使游标无限时打开,这会影响系统性能。任何人都可以帮助我关闭游标。帮助赞赏:)
答案 0 :(得分:1)
嘿,您可以使用 del 关键字
解决此问题result = mongo_collection.find(no_cursor_timeout=True)
del result
答案 1 :(得分:1)
要关闭光标,您需要删除您放置查询结果的变量
del cursor
或
cursor.close()
您还可以通过选择较低的batch_size值来解决问题:
(以Pymongo为例)
col.find({}).batch_size(10)
答案 2 :(得分:0)
Python使用引用计数进行对象生存期管理,当Cursor对象超出范围时,垃圾收集器将调用__die()来关闭游标。如果你想要显式控制,你可以自己调用close()。
Close()在内部调用__die()。检查此out