3

データベースで開いているカーソルがまだタイムアウトしているかどうかを確認することはできますか? プロパティは、.alive実際に を呼び出さないと更新されないように見えますがnext()、それによってカーソル位置が進むことにもなり、これは望ましくありません。

背景: Web クライアントにデータを遅延読み込みしています。クライアントがカーソルからさらにデータを要求できるように、サーバー側でカーソルを開いたままにしています。Mongo でカーソルをタイムアウトさせます。これは、ユース ケースには十分であり、カーソルの保証されたガベージ コレクションを簡素化するためです。ただし、開いているカーソル参照を Python 側で管理する必要があります。これは、時折のガベージ コレクション サイクルで行っています。このサイクル中に、Mongo 側で既にタイムアウトになっているカーソルを破棄したいと思います。

4

1 に答える 1

2

PyMongo ドライバーのchangelog.rstによると、意味のある情報が提供されなくなったため、このaliveメソッドは廃止されました。MongoClientMongo クライアントが切断された場合でも、次の操作を実行するのに間に合うようにサーバーを検出する場合があります。aliveは引き続きカーソル レベルで使用できますが、一時的に反復を停止する可能性があるため、tailable カーソルに意味のある情報しか提供しません。通常のカーソルの場合、カーソルがまだ生きているかどうかを確認する唯一の信頼できる方法は、 を呼び出すことnext()です。

呼び出しnext()に問題がある場合は、次のようなスニペットを使用して、カーソルを巻き戻し、最後のレコードまで再生できます。

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