如何显式停止使用python模块kazoo在zNode上启动的datawatch进程?
下面是我创建datawatch的方法

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


我经过kazoo wiki并找出以下方法。


从传递的回调方法(此处为callback_function)返回False将停止zNode上的datawatch。
但是这种方式不适合我,因为callback_function是由用户而不是我自己处理的。
当进程停止时,datawatch自动被杀死。但是我不想停止这个过程。
这是我目前使用的骇客方式。
在datawatch类下有一个私有成员变量“ _stopped”。我将其设置为true。

datawatch._stopped = True



有人可以在这里建议更好的解决方案。
谢谢。

最佳答案

DataWatch Doc还说:


  如果关闭了客户端连接(使用close命令),则DataWatch将不再获取更新。
  因此,停止zookeeper客户应该足够了。


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()

10-08 09:12