首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法启动kazoo客户端。失败,因为“对不是套接字的东西尝试了一个操作”

无法启动kazoo客户端。失败,因为“对不是套接字的东西尝试了一个操作”
EN

Stack Overflow用户
提问于 2014-07-14 13:30:45
回答 1查看 1.9K关注 0票数 1

我刚从Kazoo开始,我无法运行一个非常简单的程序:

代码语言:javascript
复制
from kazoo.client import KazooClient
import logging
logging.basicConfig(level=logging.DEBUG)
from kazoo.retry import KazooRetry
_retry = KazooRetry(max_tries=1000, delay=0.5, backoff=2)
zk = KazooClient(hosts='164.55.92.8:2181', logger=logging, timeout=10, connection_retry=_retry, read_only=True)

zk.start()
import time
print('sleeping 5!')
time.sleep(5)
zk.stop()

产出如下:

代码语言:javascript
复制
ERROR:root:Unhandled exception in connection loop  
Traceback (most recent call last):  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\protocol\connection.py", line 522, in _connect_attempt  
    [], [], timeout)[0]  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\handlers\threading.py", line 250, in select  
    return select.select(*args, **kwargs)  
error: (10038, 'An operation was attempted on something that is not a socket')  
INFO:root:Zookeeper session lost, state: CLOSED  
Exception in thread Thread-3:  
Traceback (most recent call last):  
  File "C:\Python27\lib\threading.py", line 551, in __bootstrap_inner  
    self.run()  
  File "C:\Python27\lib\threading.py", line 504, in run  
    self.__target(*self.__args, **self.__kwargs)  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\protocol\connection.py", line 466, in zk_loop  
    if retry(self._connect_loop, retry) is STOP_CONNECTING:  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\retry.py", line 123, in __call__  
    return func(*args, **kwargs)  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\protocol\connection.py", line 483, in _connect_loop  
    status = self._connect_attempt(host, port, retry)  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\protocol\connection.py", line 522, in _connect_attempt  
    [], [], timeout)[0]  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\handlers\threading.py", line 250, in select  
    return select.select(*args, **kwargs)  
error: (10038, 'An operation was attempted on something that is not a socket')  


Traceback (most recent call last):  
  File "C:\Users\klow\Google Drive\mycode\mykazoo\kazooo.py", line 8, in <module>  
    zk.start()  
  File "C:\Python27\lib\site-packages\kazoo-2.0-py2.7.egg\kazoo\client.py", line 537, in start  
    raise self.handler.timeout_exception("Connection time-out")  
TimeoutError: Connection time-out  
>>>   

我正在Window 7笔记本上运行这个程序,而Zookeeper服务器正在一个Linux机器上运行。看起来TCP连接是由一些东西组成的,在那之后很快就被搞砸了。我查了一下代码。我可以看到,TCP连接已经在connection.py:510 (self._connect(主机,端口))上建立,self._socket被分配给由create_tcp_connection(socket,*args,**kwargs)返回的对象。但是,self.handle.select()在connectiom.py:521上不喜欢套接字。有什么想法吗?提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2014-08-17 08:37:33

我一直在用类似的方法调查这件事。Win7 +运行在linux机器上的动物园管理员。使用Python3.4。总之,我觉得这个电话

代码语言:javascript
复制
s = self.handler.select([self._socket, self._read_pipe],
                                        [], [], timeout)[0]

正在尝试对管道进行选择。根据python文档,管道上的选择在Windows上不起作用。因此,kazoo似乎不能在Windows上使用当前的体系结构。我在代码副本中乱搞成对的套接字,但看起来不太好。

kazoo不适用于windows客户端这一事实限制了它的实用性.

更新:所以在kazoo源代码中进行一些黑客攻击可以解决这个问题。我创建了一个小的实用函数来在Windows上创建一个套接字对。此套接字对模拟管道,并由create_pipe函数在utils中返回。在客户机中有几个地方可以调用os.read()和os.write(),我用socket.recv和socket.send替换了它们,一切看起来都正常。

我不太清楚kazoo为什么要用管道。这似乎主要是一个信号功能,可以做得更好的信号。无论如何,我将检查代码,看看是否可以找到更持久的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24737678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档