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()
2-zakoo使用的更多相关文章
随机推荐
- python的pexpect模块
Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. P ...
- 高仿美团iOS版,版本5.7
高仿美团iOS版,版本:5.7 iOS技术交流群:112365317 github链接:https://github.com/lookingstars/meituan 假设你认为不错.欢迎star 哦 ...
- linux 标准i2c接口(一)
一:I2C设备操作方式: 1. 应用程序操作法:i2c的设备的驱动可以直接利用linux内核提供的i2c-dev.c文件提供的ioctl函数接口在应用层实现对i2c设备的读写,但是在应用层使用ioc ...
- CXF、Spring整合的SOAP Web Service服务端
1.建工程,导入CXFjar包 2.服务接口 package com.cxf.soap; import java.util.List; import javax.jws.WebService; @We ...
- JavaScript随机数区间限制
在一段区间内的取某个数字 有一个通用的方法 主要使用了一下两个javascript函数 1.Math.floor() 方法可对一个数进行下舍入 2.Math.random() 方法可返回介于 0 ~ ...
- EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- hadoop mapred和mapreduce包
mapred包是老的1.0的map reduce api mapreduce包是新的2.0的map reduce api
- python 目录下的__init__.py
1 一个目录要成为一个package必须有__init__.py文件 The __init__.py files are required to make Python treat the direc ...
- sqlldr trailing nullcols
由于要导入到tmp_content表的一些列(列:要导入的源文件txt or csv文件)为空,也,按理讲我当时另存为(在windows处理)csv,以,分隔.就是这个列没有内容,也该显示, ,之类的 ...
- spring 相关博客
Spring中使用Interceptor拦截器 spirng4 中文文档 ssm整合 Spring系列之Spring常用注解总结 Spring框架中context-param与servlet中in ...