是否可以检查打开的游标是否已在数据库上超时?如果没有实际调用.alive
,next()
属性似乎不会更新,但这也会导致光标位置前进,这是我不想要的。
背景:我将数据延迟加载到Web客户端,并且我将光标保持在服务器端打开,以便客户端可以从中请求更多数据。我让Mongo的游标超时,因为这对于用例来说已经足够了,并且简化了游标的有保证的垃圾收集。但是,这让我管理开放游标引用Python端,我正在做一个偶尔的垃圾收集周期。在这个周期中,我想扔掉任何已经在Mongo身边超时的游标。
答案 0 :(得分:2)
根据PyMongo驱动程序的changelog.rst,alive
方法在MongoClient
上已弃用,因为它不再提供有意义的信息。即使Mongo客户端断开连接,它也可能及时发现服务器以完成下一个操作。 alive
在游标级别仍然可用,但是,它仅为可用的游标提供有意义的信息,因为它们可能会暂时停止迭代。对于普通游标,验证游标是否仍然存在的唯一可靠方法是调用next()
。
如果调用next()
是个问题,您可以使用类似下面的代码段回放光标并将其重播到最后一条记录:
recordCount = 10
cursor.rewind()
counter = 0
for _ in cursor:
counter = counter + 1
if counter == recordCount:
break