python中使用kazoo连接zookeeper(一)

时间:2023-12-31 19:57:02

http://hi.baidu.com/eldersun/item/b9266e019da769f0f45ba6a4

python下连接zookeeper使用最多的是python 包装的zookeeper 的c客户端,但是使用c客户端来访问zookeeper不是很方便,特别是如果你有代码洁癖,肯定不能容忍这种情况,那么有没有纯python的实现方式呢,答案是肯定的,kazoo就是比较好的实现方案,而且发展很迅速,目前已经比较成熟。

相比其它的zookeeper 的客户端 API相比,包括java的客户端API,kazoo提供了许多更为高层的接口。

zookeeper支持事件编程是非常常见的场景,常用的几个方法示例:

场景一:

#官方文档说如果使用锁对象(lock)的话,最好要监控zk client的连接状态,防止执行过程中锁的丢失。

#侦听zk的连接状态,如果失去链接,需要进行处理,如锁可能已经丢失,需要放弃本地的leader角色
from kazoo.client import KazooState
def my_listener(state):
    if state == KazooState.LOST:
        # Register somewhere that the session was lost
    elif state == KazooState.SUSPENDED
        # Handle being disconnected from Zookeeper
    else:
        # Handle being connected/reconnected to Zookeeper

zk.add_listener(my_listener)

场景二:
#获取变化,当成控制信号
@zk.DataWatch("/my/favorite")
def watch_node(data, stat):
    print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))