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

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如何为ConcurrentHashMap使用并设置适当的并发级别?   java泛型方法,运行时错误,   java在页面上显示加载的图像   java Paypal定期直接支付问题   java如何延迟重新绘制组件   JavaSpringBoot+Hibernate如何维护@Transient字段   java在其方法中获取关于类的信息   在java中将别名添加到枚举   java如何解决向google报告成绩时“需要重新连接客户端”的问题   清晰的java图像背景   java未找到适合JDateChooser的构造函数(字符串、字符串、字符)   java LRU缓存实现。某些测试用例的代码失败   if语句Java嵌套的if/Else条件   java JSoup“wrap”并非每次都按预期工作   Java Spring引导循环依赖于一个环境   ssl证书无法通过Java和IntelliJ连接到SOAP服务   带整数验证的Java扫描器   java在Flex中呈现具有动态列的datagrid   java Android:通过用户选择的选项将文件上载到服务器   子类中的java抛出错误、异常和运行时异常