2016-10-20 5 views
2

pythonモジュールkazooを使用してzNodeで開始されたdatawatchプロセスを明示的に停止する方法はありますか?以下 は私がkazoo wikiを経て、方法の下に考え出しDATAWATCHkazooを使ってzookeeperノードでdatawatchを停止するには?

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

を作成した方法です。

  1. コールバックメソッド(ここではcallback_function)からFalseを返すと、zNodeのdatawatchが停止します。 しかし、この方法は私にとっては適切ではありません。なぜなら、callback_functionはユーザによって処理され、私の手では処理されないからです。
  2. プロセスが停止すると、datawatchは自動的に終了します。しかし、私はそのプロセスを止めたくありません。
  3. これは現在私が使用しているハッキーな方法です。 datawatchクラスの下にプライベートメンバー変数 "_stopped"があります。私はそれを真実に設定しています。

    datawatch._stopped = True 
    

誰かがここでより良いソリューションを提案してくださいすることができます。おかげさまで

答えて

1

DataWatch Docも書かれています:

クライアント接続が閉じている場合(closeコマンドを使用して)、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

関連する問題