1

当服务器正在执行像前端索引这样的长时间运行操作时,如何以编程方式判断它是否被锁定?我当前的代码是这样的:

def server_locked(timeout=5):
    con = pymongo.Connection(network_timeout=5)
    try:
        con.database_names()
        return False
    except pymongo.errors.AutoReconnect:
        return True

但是有更好的方法吗?

4

2 回答 2

1

在数据库上,用于current_op()查看正在进行的操作。并command('serverStatus')获得每个锁的报告。

这是进行大量插入时的示例:

connection = Connection()
db = connection.test_database
db.current_op()

{
  u'inprog': [
    {
      u'numYields': 0,
      u'lockStats': {
        u'timeAcquiringMicros': {
          u'r': 0L,
          u'w': 3L
        },
        u'timeLockedMicros': {

        }
      },
      u'waitingForLock': False,
      u'desc': u'conn1',
      u'connectionId': 1,
      u'locks': {
        u'^test': u'W',
        u'^': u'w'
      },
      u'client': u'127.0.0.1:64743',
      u'threadId': u'0x104681000',
      u'active': True,
      u'query': {

      },
      u'opid': 11199,
      u'ns': u'test.test',
      u'secs_running': 0,
      u'op': u'insert'
    }
  ]
}
于 2012-09-20T16:53:05.903 回答
0

Pymongo Connection 对象有一个名为is_locked.

文档

于 2012-09-21T00:11:07.127 回答