【问题标题】:How to stop datawatch on zookeeper node using kazoo?如何使用 kazoo 在 zookeeper 节点上停止 datawatch?
【发布时间】:2017-03-02 09:20:42
【问题描述】:

如何使用 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
    

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

【问题讨论】:

    标签: python apache-zookeeper kazoo


    【解决方案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()
    

    【讨论】:

    • 谢谢@Lorenzo,但我已经在问题的第 2 点提到我的情况不允许我关闭客户端连接。
    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2018-05-04
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多