在任何数据到达之前终止查询

时间:2012-09-04 16:53:06

标签: python mongodb pymongo

我有一个相当大的集合并进行非索引(有意)查询,这可能需要很长时间才能返回第一批结果,或表示失败。如果在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_cursorsexcept,但这不起作用,可能是因为cur.cursor_id仍然是None,直到它从服务器收到任何数据

有没有办法杀死查询,即使它还没有返回任何数据呢?

1 个答案:

答案 0 :(得分:2)

没有PyMongo包装器,但您可以使用相关的数据库命令来查询opid并终止操作。它看起来像:db['$cmd.sys.killop'].find_one({op:op})。出于某种原因,this doesn't seem to work with PyMongo 2.1

请参阅: