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 に答える