如何在kazoo中使用zookeeper watch阻止程序

时间:2013-04-19 02:57:14

标签: python-3.x apache-zookeeper watch kazoo

我阅读了kazoo的文档。 然后我在网站上运行了代码示例,每次运行时都会调用一次func for watch,我想阻止程序直到删除一个节点的子节点,我该怎么做?

当前代码:

#!/usr/bin/env python3

from kazoo.client import KazooClient

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

@zk.ChildrenWatch("/distribute-lock")
def watch_children(children):
    print("Children are now: %s" % children)
children = zk.exists("/distribute-lock/childnode-325", watch=watch_children)
print(children)   
zk.stop()

1 个答案:

答案 0 :(得分:2)

您可以使用threading.Lock来实现此要求;它会阻塞程序,直到子节点/ distribute-lock删除或添加为止。

代码:

#!/usr/bin/env python3

from kazoo.client import KazooClient
from threading import Lock

zkl = Lock()
def my_func(event):
    if event.type == 'CHILD':
        zkl.release()

zk = KazooClient(hosts='127.0.0.1:2181')
zk.start()
zkl.acquire()
children = zk.get_children("/distribute-lock", watch=my_func)
zkl.acquire()
zk.stop()