检查光标是否超时

时间:2015-12-16 15:25:24

标签: mongodb pymongo pymongo-3.x

是否可以检查打开的游标是否已在数据库上超时?如果没有实际调用.alivenext()属性似乎不会更新,但这也会导致光标位置前进,这是我不想要的。

背景:我将数据延迟加载到Web客户端,并且我将光标保持在服务器端打开,以便客户端可以从中请求更多数据。我让Mongo的游标超时,因为这对于用例来说已经足够了,并且简化了游标的有保证的垃圾收集。但是,这让我管理开放游标引用Python端,我正在做一个偶尔的垃圾收集周期。在这个周期中,我想扔掉任何已经在Mongo身边超时的游标。

1 个答案:

答案 0 :(得分:2)

根据PyMongo驱动程序的changelog.rstalive方法在MongoClient上已弃用,因为它不再提供有意义的信息。即使Mongo客户端断开连接,它也可能及时发现服务器以完成下一个操作。 alive在游标级别仍然可用,但是,它仅为可用的游标提供有意义的信息,因为它们可能会暂时停止迭代。对于普通游标,验证游标是否仍然存在的唯一可靠方法是调用next()

如果调用next()是个问题,您可以使用类似下面的代码段回放光标并将其重播到最后一条记录:

recordCount = 10
cursor.rewind()
counter = 0
for _ in cursor:
    counter = counter + 1
    if counter == recordCount:
        break