2016-10-20 5 views
2

python 모듈 kazoo를 사용하여 zNode에서 시작된 datawatch 프로세스를 명시 적으로 중지하는 방법은 무엇입니까? 다음은 내가 datawatchkazoo를 사용하여 사육사 노드에서 datawatch를 중지하는 방법?

from kazoo.recipe.watchers import DataWatch 
datawatch = DataWatch(client=zookeeper_client, path=path_to_znode, func=callback_function) 

을 만든 방법 나는 kazoo wiki을 통해 가서 방법을 아래에 알아 낸 것입니다.

  1. 전달 된 콜백 메소드 (여기, callback_function)에서 False가 반환되면 zNode에서 datawatch가 중지됩니다. 그러나이 방법은 callback_function이 사용자가 아닌 내 손으로 처리되므로 적합하지 않습니다.
  2. 프로세스가 중지되면 datawatch가 자동으로 종료됩니다. 그러나 나는 그 과정을 멈추고 싶지 않다.
  3. 이것은 현재 내가 사용하고있는 해킹 방법입니다. datawatch 클래스 아래에 "_stopped"라는 private 멤버 변수가 있습니다. 나는 그것을 사실로 설정하고있다.

    datawatch._stopped = True 
    

누군가 여기에 더 나은 솔루션을 제안 해주십시오 수 있습니다. 감사합니다. .

답변

1

DataWatch Doc는 말한다 : 클라이언트 연결 (닫기 명령을 사용하여) 폐쇄

경우, DataWatch가 더 이상 업데이트를하지 않습니다. 그래서 사육사 클라이언트를 중지하면 충분합니다.

from kazoo.client import KazooClient 

zk = KazooClient(hosts='127.0.0.1:2181') 
zk.start() 
datawatch = DataWatch(client=zk, path=path_to_znode, func=callback_function) 
# time pass.... 
zk.stop() 
+0

감사 @Lorenzo하지만 난 이미 내 경우 나 클라이언트 연결을 종료하는 것을 허용하지 않습니다 내 질문의 점 2에 언급했다. – Akshay