当服务器正在进行像前端索引这样的长时间运行操作时,如何以编程方式判断它是否被锁定?我目前的代码是这样的:
def server_locked(timeout=5):
con = pymongo.Connection(network_timeout=5)
try:
con.database_names()
return False
except pymongo.errors.AutoReconnect:
return True
但是有更好的方法吗?
答案 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
的属性。