如何判断服务器是否已锁定?

时间:2012-09-20 15:08:25

标签: python mongodb pymongo

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

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

但是有更好的方法吗?

2 个答案:

答案 0 :(得分: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'
    }
  ]
}

答案 1 :(得分:0)

Pymongo Connection对象有一个名为is_locked的属性。

Documentation