检查游标是否超时
Check if a cursor has timed out or not
是否可以检查数据库中打开的游标是否已超时? .alive
属性 似乎在没有实际调用 next()
的情况下不会更新,但这也会导致光标位置前进,这是我不想要的。
背景:我正在将数据延迟加载到 Web 客户端,并使游标在服务器端保持打开状态,以便客户端可以从中请求更多数据。我让游标超时 Mongo,因为这对于用例来说已经足够好了,并且简化了有保证的游标垃圾收集。但是,这让我不得不管理打开的游标引用 Python 端,这是我偶尔进行的垃圾收集周期。在这个循环中,我想丢弃 Mongo 端已经超时的所有游标。
根据 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
是否可以检查数据库中打开的游标是否已超时? .alive
属性 似乎在没有实际调用 next()
的情况下不会更新,但这也会导致光标位置前进,这是我不想要的。
背景:我正在将数据延迟加载到 Web 客户端,并使游标在服务器端保持打开状态,以便客户端可以从中请求更多数据。我让游标超时 Mongo,因为这对于用例来说已经足够好了,并且简化了有保证的游标垃圾收集。但是,这让我不得不管理打开的游标引用 Python 端,这是我偶尔进行的垃圾收集周期。在这个循环中,我想丢弃 Mongo 端已经超时的所有游标。
根据 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