我最近开始使用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
在子节点上制作多个手表可以帮助我吗?
答案 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