动物园管理员的高级绑定。

pykeeper的Python项目详细描述


#pykeeper:zookeeper的高级绑定



本项目的目标是提供一个比官方低级python zookeeper绑定(zkpython)更高级别的api。


有关django支持,请参见[djakeeper](http://github.com/nkvoll/djkeeper)。


*自动重新连接
*递归删除
*递归创建
*缓存版本的:[get(cached-get)、get-u children(cached-get-u children)、exists(cached-exists)]
*轻松处理和屏蔽临时断开/重新连接。


/>从pypi安装最新relase:

$pip install pykeeper

…或者从github获取最新的开发版本:

$pip install https://github.com/nkvoll/pykeeper/zipball/development egg=pykeeper

此外,pykeeper需要一个正式的低级python zookeeper绑定的工作安装。它们可以从源代码(推荐,解释如下)构建,也可以从pypi安装静态编译的版本[zc zookeeper static](http://pypi.python.org/pypi/zc zookeeper static),该版本可能在体系结构/操作系统上工作,也可能不在体系结构/操作系统上,
也可能不是最新版本可用的ZooKeeper版本。


根据



re--prefix=/usr/local
$make
$sudo make install
$ldconfig


生成并安装python绑定:

$cd../contrib/zkpython
$ant install


g在本地主机上:22181:

$cd example
$export zoocfgdir=$(pwd)zkserver start foreground



ctest--verbosity=2



o sys.stderr和makes允许通过默认的python日志工具处理日志输出。此行为是可选的,以后可以通过调用pykeeper.uninstall_log_stream()
>;>;pykeeper.install_log_stream()

创建zookeeper客户端并连接:
>;>;client=pykeeper.zookeeper('localhost:22181')
>>gt;client.connect()

>>gt;客户端。获取子节点('/')
['zookeeper']

\n创建节点:
>>gt;客户端。创建递归('/bar/baz','{"确定":true}')
>>gt;客户端。获取子节点('/')
['bar','zookeeper']
>>gt;bool(client.exists('/bar/baz'))
true
>>gt;client.get_children('/bar')
['baz']
>>gt;client.get('/bar/baz')
('{"ok":true},{'pzxid':3620l,"ctime":1328717487776l,"aversion":0,"mzxid":3620l,"numchildren":0,"ephemalowner":0L,"版本":0,"数据长度":12,"时间":1328717487776L,"版本":0,"czxid":3620L})

/>false
>;>client.get_children('/')
['foo','zookeeper']


在<;module>;
文件"pykeeper/client.py"的第176行中,在get
返回zookeeper.get(self.handle,path,self.\u wrap\u watcher(watcher))
zookeeper.nonodeexception:没有节点


Zookeeper服务器调用客户端时将引发异常:

>;>>client.get('/')
回溯(最近一次调用):
文件"<;stdin>;",第1行,在<;模块中;
文件"pykeeper/client.py",第176行,在get中返回zookeeper.get(self.handle,path,self.\u wrap_watcher(watcher))
zookeeper.connectionLossException:连接丢失

我们可以通过调用带有可选超时的"client.wait廑until廑connected()",等待重新建立连接。默认超时为"none",这意味着在重新建立连接之前,调用将被阻塞:

>;>client.state\name
"connecting"
>;>client.wait\u until\u connected()
>;>client.state\name
"connected"

在超时发生之前未重新建立连接,将引发TimeoutException:

>;>client.state\u name
'connecting'
>;>client.wait\u直到连接(超时=10)
回溯(最近一次调用):
file"<;stdin>;",第1行,in<;module>;
文件"pykeeper/client.py",第130行,在等待连接之前
raise timeoutexception()
pykeeper.client.timeoutexception
>;>;client.state\name
"connecting"



``当我调用客户端的任何函数时?

a:很有可能,您试图按照以下方式执行操作:

>;>;导入pykeeper
>;>;客户端=pykeeper.zookeeper('localhost:22181')
>;>;客户端。获取子项('/')
回溯(最近一次调用):
文件""<;stdin>;,第1行,在<;module>;
文件"pykeeper/client.py",第153行,在get_children
返回zookeeper.get_children(self.handle,path,self._wrap_watcher(watcher))
类型错误:需要整数

问题是您忘记调用"client.connec"t()``在使用客户端之前:

>;>;导入pykeeper
>;>;client=pykeeper.zookeeper('localhost:22181')
>;>;client.connect()
>;>;client.get_children('/')
['zookeeper']

在使用客户端以确保客户端有时间连接到ZooKeeper集成之前,请先连接(超时=…)`。


()另一个解决方案是重新使用客户机,而不是每次需要时都创建一个新的客户机。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在spatialite数据库安卓中存储多边形数据?   java如何在两个项目中的测试文件夹之间设置Maven依赖关系?   从Android插入数据库的java不同图像显示相同的值?   java javafx listview和treeview控件未正确重新绘制   java如何在getter和setter方法中放置钩子   java在半透明的JFrame上删除JTextPane的白色背景,而不使用set不透明()   java向Firebase写入数据只能在刚刚登录后才能工作,除非注销并再次登录,否则无法成功工作   java为什么我的infinite会导致程序的其余部分冻结,即使它位于单独的线程上?   java伪客户端Url格式不正确   java JFileChooser(showSaveDialog)无法获取所选扩展文件的值   为什么我的子类不能在java中正确初始化变量   有什么好的JavaSwing时间轴小部件吗?   java在数组中存储素数最有效的方法是什么   java Android Studio意外的内容存储修改   使用getter访问静态对象、“公共静态”或“私有静态”的java最佳实践   java如何在销毁SurfaceView后返回到主活动?   使用片段和java的Android导航。反映   java将变量从一个类发送到另一个类   如何将Lambda转换成简单的Java函数