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")))
