2

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

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

我浏览了kazoo wiki并想出了以下方法。

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

    datawatch._stopped = True
    

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

4

1 回答 1

1

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()
于 2016-12-19T14:20:05.373 回答