• 2-zakoo使用


    source:http://kazoo.readthedocs.io/en/latest/basic_usage.html

    1 基本使用

    1.1 连接处理

      要使用zakoo,需要创建一个KazooClient对象,来建立一个和服务器的连接。

      zakoo有一个状态系统,可以注册一个listerner,在状态改变的时候被调用。有三种状态:lost,connected,suspended。

    1.2 CRUD

      zakoo可以在znode上进行create、read、update、delete操作。

      create:

         ensure_path(),可以在多层目录中创建不存在的中层目录。但不可以设定节点的内容。

         create(),创建节点和内容。

      read:

         exists(),查看一个节点是否存在

         get(),抓取节点内容。

         get_children(),获取子节点列表

      update:

         set(),操作和create一致。

      delete:

         delete(),删除节点,可以递归删除。

    1.3 watchers

      设置检测器,在节点改变或子节点改变时触发。

      第一种设定方式:只接受一次调用,不接受会话事件。在get和get_children里面设定。

      第二种设定方式:每次改变都会触发,不需要重设检测器。

         ChildrenWatch

         DataWatch

    1.4 transactions

      将多个命令作为一个单元提交。

      好像没什么用,再说。。

    1.5 测试代码

    import time
    from kazoo.client import KazooClient
    from kazoo.client import KazooState
    
    def main():
        #-----------建立连接-----------
        zk = KazooClient(hosts='192.168.10.12:2181')
        zk.start()
    
        @zk.add_listener
        def my_listener(state):
            if state == KazooState.LOST:
                print('conn lost')
            elif state == KazooState.SUSPENDED:
                print('conn sus')
            else:
                print('conn ok')
    
        #---------写入节点信息----------
        #zk.create("/worker/process1/125",b"i am award process.")
    
        #--------读取节点信息----------
        #if zk.exists("/worker/process1/125"):
        #    print("125 exists.")
    
        #data,stat = zk.get('/worker/process1/125')
        #print(data)
    
        #children = zk.get_children('/worker/process1')#
        #print(children)
    
        #-------改写节点信息---------
        #zk.set("/worker/process1/125",b"i am tally process.")
        #data,stat = zk.get('/worker/process1/125')
        #print(data)
    
        #--------删除节点-----------
        #zk.delete('/worker/process1',recursive=True)
        #pchildren = zk.get_children('/worker')
        #rint(children)
    
        #--------设置检测器---------
        @zk.ChildrenWatch('/worker')
        def watch_children(children):
            print("Children are now: %s" % children)
    
        @zk.DataWatch('/worker/process2')
        def watch_node(data,stat):
            print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))
    
        time.sleep(2)
        zk.stop()
    
    if __name__ == '__main__':
        main()
    

      

  • 相关阅读:
    js获取盒子scrollTop
    获取浏览器宽度,自适应屏幕
    js切割字符串
    有向图的欧拉路径POJ2337
    欧拉回路和欧拉路径
    HDU 4462(暴力枚举)
    HDU 4455(dp)
    鸽巢原理入门
    HDU 4819 Mosaic(二维线段树)
    POJ 1330 Nearest Common Ancestors(LCA模板)
  • 原文地址:https://www.cnblogs.com/jabbok/p/8963427.html
Copyright © 2020-2023  润新知