如何使用kazoo观察Python中的后代子节点?

时间:2013-11-19 18:18:14

标签: python apache-zookeeper watch kazoo

我最近开始使用Python for Zookeeper。我正在为Zookeeper使用kazoo库。

我有一个非常简单的使用kazoo用于Zookeeper的用例。我有一个根节点 - /root。现在我需要监视根节点/root,如果添加到根节点/root的新节点是/root/testing,那么我只会监视{{1}节点。我不想在/root/testing节点以外的任何其他节点上监视。然后,如果任何新的孩子被添加到testing节点,那么我也会密切注意它们。

让我们说下面的孩子加起来 -

/root/testing

然后我也会关注`/root/testing/test1` 节点。

这可以在Zookeeper中使用Kazoo吗?我只能使用以下代码在一个Zookeeper节点(test1)上监视:

/root

在子节点上制作多个手表可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

尝试这样的事情。

import time
from kazoo.client import KazooClient

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

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

答案 1 :(得分:0)

如果您尝试监视多个节点而不是一个节点,则可以使用多个线程(基本上它在不同的“线程”上同时运行不同的代码)。 Python有一个用于同时执行操作的线程模块,这可能正是您想要的。以下是实现线程的代码示例。

import threading

def watch_node(node):
    #implement your node watching script here

def watch_in_background(node):
    watcher = threading.Thread(target=watch_node,args=(node))   #initializes a thread that can run the watch_node function in the background, passing the node argument to it
    watcher.start()                                             #tells the thread to start running
    return watcher                                              #returns the thread object just in case you want to use it for something

watch_in_background(<node>)                                     #so this code will now watch the node in the background, allowing you to do other things, like watch multiple nodes