【问题标题】:how to used zookeeper watch in kazoo to block program如何在kazoo中使用zookeeper watch来阻止程序
【发布时间】:2013-10-29 23:35:18
【问题描述】:

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

当前代码:

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用threading.Lock 来实现此要求;它会阻塞程序,直到有 /distribute-lock delete 或 add 的子节点。

    代码:

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

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 2015-05-26
      • 2013-12-02
      • 2018-07-11
      • 2011-11-11
      • 2017-11-10
      • 1970-01-01
      • 2013-12-02
      相关资源
      最近更新 更多