как использовать часы зоопарка в казу, чтобы заблокировать программу

Я прочитал документы для kazoo. Затем я запустил пример кода на сайте, функция для просмотра вызывалась один раз при каждом запуске, я хочу заблокировать программу, пока дети одного узла не будут удалены, как я могу это сделать?

Текущий код:

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

person xielingyun    schedule 19.04.2013    source источник


Ответы (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()
person xielingyun    schedule 22.04.2013