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 测试代码

  1. import time
  2. from kazoo.client import KazooClient
  3. from kazoo.client import KazooState
  4.  
  5. def main():
  6. #-----------建立连接-----------
  7. zk = KazooClient(hosts='192.168.10.12:2181')
  8. zk.start()
  9.  
  10. @zk.add_listener
  11. def my_listener(state):
  12. if state == KazooState.LOST:
  13. print('conn lost')
  14. elif state == KazooState.SUSPENDED:
  15. print('conn sus')
  16. else:
  17. print('conn ok')
  18.  
  19. #---------写入节点信息----------
  20. #zk.create("/worker/process1/125",b"i am award process.")
  21.  
  22. #--------读取节点信息----------
  23. #if zk.exists("/worker/process1/125"):
  24. # print("125 exists.")
  25.  
  26. #data,stat = zk.get('/worker/process1/125')
  27. #print(data)
  28.  
  29. #children = zk.get_children('/worker/process1')#
  30. #print(children)
  31.  
  32. #-------改写节点信息---------
  33. #zk.set("/worker/process1/125",b"i am tally process.")
  34. #data,stat = zk.get('/worker/process1/125')
  35. #print(data)
  36.  
  37. #--------删除节点-----------
  38. #zk.delete('/worker/process1',recursive=True)
  39. #pchildren = zk.get_children('/worker')
  40. #rint(children)
  41.  
  42. #--------设置检测器---------
  43. @zk.ChildrenWatch('/worker')
  44. def watch_children(children):
  45. print("Children are now: %s" % children)
  46.  
  47. @zk.DataWatch('/worker/process2')
  48. def watch_node(data,stat):
  49. print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))
  50.  
  51. time.sleep(2)
  52. zk.stop()
  53.  
  54. if __name__ == '__main__':
  55. main()

  

2-zakoo使用的更多相关文章

随机推荐

  1. 项目Beta冲刺(团队3/7)

    项目Beta冲刺(团队3/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...

  2. 3531: [Sdoi2014]旅行

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1731  Solved: 772 [Submit][Statu ...

  3. java随记2

    1.Arrays java8里新添加了parallelSort等parallel开头的方法,表示利用cpu并行的能力 2.面向对象 如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类 ...

  4. CentOS笔记-yum

    yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. yum [options] [command] [p ...

  5. 在Java中如何正确地终止一个线程

    1.使用Thread.stop()? 极力不推荐此方式,此函数不安全且已废弃,具体可参考Java API文档 2.设置终止标识,例如: import static java.lang.System.o ...

  6. 开启 J2EE(六)— Servlet之Filter具体解释及乱码处理实例

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/akkzhjj/article/details/36471477 定义和功能 Filter:过滤器,它 ...

  7. UISegmentedControl方法与属性的总结

    SegmentedControl又被称作分段控制器,是IOS开发中经常用到的一个UI控件. 初始化方法:传入的数组可以是字符串也可以是UIImage对象的图片数组 - (instancetype)in ...

  8. Hadoop中序列化与Writable接口

    学习笔记,整理自<Hadoop权威指南 第3版> 一.序列化 序列化:序列化是将 内存 中的结构化数据 转化为 能在网络上传输 或 磁盘中进行永久保存的二进制流的过程:反序列化:序列化的逆 ...

  9. .Net线程池ThreadPool导致内存高的问题分析

    最近写了一个WinFrom程序.此程序侦听TCP端口,接受消息处理,然后再把处理后的消息,利用线程池通过WebService发送出去(即一进一出). 在程序编写完成后,进行压力测试.用Fiddler提 ...

  10. Objective-C - - 字符串与数字互相转换

    NSString *string = @"123"; // 1.字符串转int int intString = [string intValue]; // 2.int装字符串 NS ...