4

我最近开始使用Python for Zookeeper. 我正在使用kazooZookeeper 库。

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

假设下面的孩子被加起来 -

`/root/testing/test1`

然后我也会关注test1节点。

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

#!/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)

谁能帮我在子节点上制作多个手表?

4

2 回答 2

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)
于 2013-11-25T21:52:08.000 回答
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
于 2013-11-23T22:27:17.067 回答