如何使用kazoo监视ZooKeeper中后代节点上的事件?

时间:2013-11-19 05:40:12

标签: python apache-zookeeper watch kazoo

我最近开始使用Python for Zookeeper。我正在为Zookeeper使用kazoo库。我需要在我的根节点上监视 -

/my/example

可能会添加到我上面的根节点的其他几个节点将是这样的 -

/my/example/workflow
/my/example/workflow/v1
/my/example/workflow/v1/step1
/my/example/workflow/v1/step2

现在我需要检查在根节点/my/example中添加的子节点是否为/my/example/workflow。如果在workflow中添加了/my/example节点,那么我将仅在/my/example/workflow节点上监视,如果在/my/example/workflow节点中添加了任何新子节点,那么我需要保留也是该节点上的手表。

假设/my/example/workflow的孩子是/my/example/workflow/v1,所以现在我需要关注/my/example/workflow/v1,然后在此节点上添加任何新节点{{1} }例如/my/example/workflow/v1/my/example/workflow/v1/step1然后我需要打印/my/example/workflow/v1/step2节点的子节点,我现在不会制作任何新手表。

现在我不知道如何继续在我的孩子身上调用手表直到某一点,在这种情况下直到/my/example/workflow/v1我需要继续观看,一旦所有步骤节点加起来,我需要打印/my/example/workflow/v1的孩子。下面是我的代码,只能在一个根节点上观看,现在我不知道如何解决上述问题?

/my/example/workflow/v1

任何帮助都非常感谢。我通过阅读here

中的kazoo教程来关注文档

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

import time
from kazoo.client import KazooClient

zk = KazooClient(hosts='127.0.0.1:2181')
zk.start()



children = zk.get_children("/my/example/")
if "/workflow" in children:
    children_testing = zk.get_children("/my/example/testing/")
        if children_testing != []: 
            @zk.ChildrenWatch("/my/example/testing")
            def watch_children(children):
                print(children)
        else:
            @zk.ChildrenWatch("/my/example/")
            def watch_children(children):
            print(children)
while True:
    time.sleep(5)