Python---操作zookeeper构建分布式系统之kazoo

# -*- coding: utf-8 -*-

# @Author   : lws
# @Time     : 2018/11/19 9:05
# @describe : kazoo基础用法

from kazoo.client import KazooClient
from kazoo.client import KazooState
import logging
import time

logging.basicConfig()   # 解决建立连接异常因没有传入log日志对象而产生的报错
zk = KazooClient(hosts='39.107.88.145:2181', timeout=1)  # 建立zk连接,超时时间设置为1s


@zk.add_listener  # my_listener = zk.add_listener(my_listener)
def my_listener(state):
    """监听客户端连接状态
        此函数看似没有显示调用,实际调用在装饰器中,也就是return时"""
    if state == KazooState.LOST:
        print 'lost'
    elif state == KazooState.SUSPENDED:
        print 'suspended'
    else:
        print 'connected'

zk.start()


def my_watch(event):
    """监视器函数,得有一个形参,监视的节点或者子节点变化时被调用"""
    print "event:", event


@zk.ChildrenWatch("/lws")
def watch_children(children):
    """监视节点是否变化,如增加和删除节点"""
    print "Children are now %s" % children


@zk.DataWatch("/lws/test/1")
def watch_node(data, state):
    """监视节点数据是否变化"""
    print "Version:", state.version, "data:", data

# zk.set("/lws/test/1", b"some data", version=5)  # 更新给定节点数据,可以提供版本号,更新前需匹配
# zk.delete("/lws/test/1", recursive=True)        # 删除zNode节点,可选择递归删除,也可提供版本号删除

while True:
    time.sleep(2)
    if zk.exists("/lws/test"):                      # 检测zNode是否存在,如存在,返回True
        # 获取给定节点的子节点列表,且可以注册监视器函数,当节点或者子节点变化时回调,exists()和get()也具备此功能
        children = zk.get_children("/lws/test", watch=my_watch)
        print "There are %s children with names %s" % (len(children), children)
        for child in children:
            data, state = zk.get("lws/test/%s" % child)        # 获取节点数据及节点详细信息
            print 'Version:', state.version, 'Data:', data
    else:
        zk.ensure_path("/lws/test")                 # 递归的创建zNode节点,但不能设置数据,只能设置ACL
        zk.create("/lws/test/1", b"value one")      # 创建zNode节点,可以设置数据
        zk.create("/lws/test/2", b"value two")
        zk.create("/lws/test/3", b"value three")
        print 'create zNode success'


# zk.stop() # 断开连接

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值