提问者:小点点

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


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

我有一个非常简单的使用kazoo for Zookeeper的用例。我有一个根节点-/root。现在我需要监视根节点/root,如果添加到根节点/root的新节点是/root/testing,那么我只监视/root/testing节点。除了测试节点之外,我不想监视任何其他节点。然后,如果有任何新的子节点被添加到/root/testing节点,那么我也会监视它们。

假设下面的孩子加起来-

`/root/testing/test1`

然后我也会监视test1节点。

在动物园管理员中使用Kazoo可以做到这一点吗?我只能用下面的代码在一个动物园管理员节点(/root)上保持监视:

#!/usr/bin/python
import time

from kazoo.client import KazooClient

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

########################################
@zk.ChildrenWatch("/root/testing")
def watch_children(children):
   print(children)

########################################

while True:
    time.sleep(5)

有人能帮我在子节点上制作多个手表吗?


共2个答案

匿名用户

试试这样。

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)

匿名用户

如果您试图监视多个节点,而不是一个节点,您可以使用多个线程(基本上它在不同的“线程”上同时运行不同的代码)。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