在尝试使用python上的thrift执行RPC时,我遇到了一个奇怪的错误。我在网上发现了类似的问题,但没有一个真的适用于我的情况。
这是我得到的错误
No handlers could be found for logger "thrift.transport.TSocket"
Traceback (most recent call last):
File "experiment.py", line 71, in <module>
transport.open()
File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TTransport.py", line 152, in open
return self.__trans.open()
File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TSocket.py", line 113, in open
raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('192.168.178.44', 9000)]
以下是我认为产生它的代码。
TECS_SERVER_IP = "192.168.178.44"
TECS_SERVER_PORT = 9000
transport = TSocket.TSocket(TECS_SERVER_IP, TECS_SERVER_PORT)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = TTSService.Client(protocol)
transport.open()
每当我尝试与另一台机器通信时就会发生这种情况,所以我尝试使用ip“127.0.0.1”并且它可以工作。但是,使用应该引用同一台计算机的localhost“192.168.178.44”的IP也会产生错误。 对我来说,它似乎无法解析IP地址...... 有关导致此问题以及如何解决问题的任何想法?
我使用的是Python 2.7.12,thrift 0.9.3和Ubuntu 16.04,但我在Windows 10上也遇到了错误。
这就是我的节俭服务开始的方式
handler = TTSHandler()
handler.__init__()
transport = TSocket.TServerSocket(host='localhost', port=9000)
processor = TTSService.Processor(handler)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
server.serve()
答案 0 :(得分:1)
您的服务器应该在客户端连接到之前绑定到该地址:
TSocket.TServerSocket(host='192.168.178.44', port=9000)
或使用host='0.0.0.0'
,这意味着绑定计算机上的所有IPv4地址。