Неблокирующий Thrift-сервер в Python
В приведенном ниже фрагменте кода я пытаюсь сделать неблокирующий Thrift-сервер на Python.
# set handler to our implementation
handler = ServiceHandler()
processor = MyService.Processor(handler)
transport = TSocket.TServerSocket(port=port)
tfactory = TTransport.TFramedTransport(transport)
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
# set server
server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
print 'Python Server has started listening on port ' + str(port)
print '################################################'
server.serve()
Я получаю следующую ошибку, когда клиент python пытается подключиться к серверу, имеющему приведенный выше фрагмент кода. Не могли бы вы сказать мне, что может быть причиной этой ошибки? Возможно, я что-то упустил.
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python2.6/threading.py", line 522, in __bootstrap_inner
self.run()
File "/usr/lib64/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/local/lib64/python2.6/site-packages/thrift/server/TServer.py", line 114, in handle
itrans = self.inputTransportFactory.getTransport(client)
AttributeError: TFramedTransport instance has no attribute 'getTransport'
1 ответ
Решение
Я нашел некоторый работающий код Thrift, и похоже, что ваша фабрика должна быть экземпляром TBufferedTransportFactory, а не экземпляром TBufferedTransport.
tfactory = TTransport.TBufferedTransportFactory()