3

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

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

4

1 回答 1

2

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

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

recordCount = 10
cursor.rewind()
counter = 0
for _ in cursor:
    counter = counter + 1
    if counter == recordCount:
        break
于 2015-12-16T16:18:27.480 回答