2012-09-20 3 views
1

서버가 프론트 엔드 색인 생성과 같은 장기 실행 작업을 수행 할 때 프로그래밍 방식으로 잠겨 있는지 여부를 알려주는 방법은 무엇입니까? 현재 코드는 다음과 같습니다.서버가 잠겨 있는지 확인하는 방법은 무엇입니까?

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

더 좋은 방법이 있습니까?

+0

세트의 일부 evnironmental 변수가 세마포어처럼 사용 ...? –

답변

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' 
    } 
    ] 
} 
+0

그럼 어떻게하면 좋을까요? 'inprog'을 반복하고'locks' 필드를 체크 하시겠습니까? – georg

+0

나는 그렇게 믿는다. 나는이 부분을 테스트하지 않았다. 2.2에서는 데이터베이스 잠금이 있고 이전 버전에서는 전역 서버 잠금이 있음을 기억하십시오. [blog post] (http://blog.serverdensity.com/goodbye-global-lock-mongodb-2-0-vs-2-2/)를 참조하십시오. –

0

Pymongo 연결 개체가 is_locked라는 속성이 있습니다.

Documentation

+0

'is_locked'는'fsyncLock' 상태 만 반환합니다. 난뿐만 아니라 잠금을 읽고 관심이. – georg

관련 문제