1

私はかなり大きなコレクションを持っており、結果の最初のバッチを返すか、失敗を示すのに長い時間がかかる可能性がある (意図的に) インデックスのないクエリを作成しています。たとえば、10 秒以内に何も返されない場合、これらのクエリは失敗します。だから私はこれを書いた:

try:
     cur = big_collection.find(query, network_timeout=10)
     for doc in cur:
          print doc
except pymongo.errors.AutoReconnect:
     print "failure!"

これはクライアントでは正常に機能しますcurrent_opが、タイムアウト後もサーバーでクエリが実行され続けると述べています。ブロック内で試しcur.close()てみdb.kill_cursorsましたが、サーバーからデータを受信するまで残っているexceptため、機能しませんでした。cur.cursor_idNone

まだデータが返されていない場合でも、クエリを強制終了する方法はありますか?

4

1 に答える 1

2

PyMongo ラッパーはありませんが、関連するデータベース コマンドを使用して opid をクエリし、操作を強制終了できます。次のようになりますdb['$cmd.sys.killop'].find_one({op:op})。何らかの理由で、これは PyMongo 2.1 では機能しないようです

見る:

于 2012-09-04T18:06:21.743 に答える