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使用的更多相关文章

随机推荐

  1. LeetCode(66)题解: Plus One

    https://leetcode.com/problems/plus-one/ 题目: Given a non-negative number represented as an array of d ...

  2. sanic官方文档解析之logging和request Data

    1,sanic的logging: Sanic允许有做不同类型的日志(通过的日志,错误的日志),在基于Python3的日志API接口请求,你必须具备基本的Python3的日志知识,在你如果想创建一个新的 ...

  3. JavaScript重点记忆

    String的常用方法 indexOf() 返回字符串中检索指定字符第一次出现的位置 lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置 match() 找到一个或多个正则表达式的 ...

  4. B.大钉骑马走江湖

    江湖是什么,对于在象棋界厮杀的大钉来说,江湖就是一个矩阵,他的目标,就是在江湖之中骑着马,从他的位置出发,走到终点. 当然,大钉的马也遵从中国象棋中的“马走日”的规则,而且在矩阵中,也会有一些障碍物, ...

  5. 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)

    首先需要明确的是,微信的API都是通过https调用实现的,分为post方法调用和get方法调用.不需要上传数据的采用get方法(例如获取AccessToken),而需要向微信服务器提交数据的采用po ...

  6. html5--6-65 布局4-弹性布局

    html5--6-65 布局4-弹性布局 实例 学习要点 掌握传统布局与CSS3新增弹性布局方式的实现和应用 弹性布局(弹性伸缩布局) 事实上它是一种新类型的盒子模型,也有书上称作弹性伸缩盒布局. 比 ...

  7. Getting Started with the Intel Media SDK

    By Gael Hofemeier on March 19, 2015 Follow Gael on Twitter: @GaelHof Media SDK Developer’s Guide Med ...

  8. Runnable、Callable、Future和FutureTask之二:源码解析

    一.Callable与Future类图 1.类图 许多任务实际上都是存在延迟的计算,对于这些任务,Callable是一种更好的抽象:它会返回一个值,并可能抛出一个异常.Callable接口: V ca ...

  9. 架构:MVC

    ylbtech-架构:MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...

  10. javascript switch..... case

    switch(条件表达式) { case 常量: { 语句a; } break; case 常量: { 语句b; } break; case 常量: { 语句c; } break; ... case ...