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使用的更多相关文章
随机推荐
- mac classpath设置
I've been searching for the answer daylong, and finally had the problems solved. I am going to write ...
- Android 打造随意层级树形控件 考验你的数据结构和设计
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...
- WPF数据验证(5)―― 错误模板
<Style TargetType="{x:Type TextBox}"> <Setter Property="Validatio ...
- GDI泄露+改EXE名
CDC 应该是成对使用 GetDC and ReleaseDC(不用new and delete) 泄露 1.改变生产exe名称:工程->设置->连接->输出文件名:Release/ ...
- c++string 输入换行符
string 一次只能输入一行,不含换行符.可以自己添加换行符 和输入行数.例如:#include <iostream>#include <string>using names ...
- object equal
package equals; public class EqualsTest { public static void main(String[] args) { Employee alice1 = ...
- finally{} 代码块
package Exception; /* * finally{}代码块 * * finally{]代码块是必须要被执行的,不管异常是否处理成功,该代码块里面的代码体都会被执行, */ public ...
- oracle case where 复杂sql语句
update hr_user u set u.is_approve=(case when u.curr_org_id in (select t.org_id from hr_organization ...
- map数据的分组,list数据排序 数据筛选
sfit0144 (李四) 2015-01-10 18:00:251Sfit0734 (Sfit0734) 2015-01-10 18:00:38go homesfit0144 (李四) 2015-0 ...
- linux杀死进程
http://blog.csdn.net/andy572633/article/details/7211546 ps -ef | grep firefox kill -s 9 1827