Я пытаюсь настроить сервер thrift python, используя Gunicorn.Однако я не смог заставить клиента работать с сервером.Я добавил соответствующий фрагмент кода в этом посте.Пожалуйста, дайте мне знать, что мне здесь не хватает.
Я получаю ошибку:
thrift-test / client.py ", строка 17, в ответе = клиент.Файл ping () "build / bdist.macosx-10.11-x86_64 / egg / contract / TestService.py", строка 94, в файле ping "build / bdist.macosx-10.11-x86_64 / egg / contract / TestService.py",строка 105, в файле recv_ping "build / bdist.macosx-10.11-x86_64 / egg / thrift / protocol / TProtocolDecorator.py", строка 32, в файле "build / bdist.macosx-10.11-x86_64 / egg / thrift / protocol /TProtocolDecorator.py ", строка 39, в файле _wrap" build / bdist.macosx-10.11-x86_64 / egg / thrift / protocol / TCompactProtocol.py ", строка 310, в файле readMessageBegin" build / bdist.macosx-10.11-x86_64 /egg / thrift / protocol / TCompactProtocol.py ", строка 289, в файле __readUByte" build / bdist.macosx-10.11-x86_64 / egg / thrift / transport / TTransport.py ", строка 58, в файле ReadAll" build / bdist.macosx-10.11-x86_64 / egg / thrift / transport / THttpClient.py ", строка 97, в read AttributeError: объект 'NoneType' не имеет атрибута 'read '
Я запускаю сервер gunicorn с помощью команды:
gunicorn_thrift -k thrift_sync -b 127.0.0.1:9999 сервер: приложение --access-logfile' -'--error-logfile' - '- loglog' debug '- thrift-protocol-factory thrift.protocol.TCompactProtocol: TCompactProtocolFactory
Код клиента:
from thrift.transport import THttpClient
from thrift.protocol import TCompactProtocol
from thrift.protocol import TMultiplexedProtocol
from contract import TestService
from thrift.protocol import TBinaryProtocol
import logging
logging.basicConfig(level=logging.INFO)
transport = THttpClient.THttpClient('http://localhost:9999')
protocol=TCompactProtocol.TCompactProtocolFactory().getProtocol(transport)
p = TMultiplexedProtocol.TMultiplexedProtocol(protocol, "testservice")
client = TestService.Client(p)
transport.open()
response = client.ping()
print response
transport.close()
Вот как реализован thrift Server.py:
#! /usr/bin/env python
# tests/app.py
# -*- coding: utf-8 -*-
import logging
from thrift import TMultiplexedProcessor
from contract import TestService
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('actions')
class TestServiceDispatcher(TestService.Iface):
def test(self, request):
pass
def ping(self):
log.info("accessing ping method")
return "service ready"
def create_app():
log.info("starting up the app")
handler = TestServiceDispatcher()
coretext_processor = TestService.Processor(handler)
processor = TMultiplexedProcessor.TMultiplexedProcessor()
processor.registerProcessor("testservice", coretext_processor)
return processor
app = create_app()
Комиссионный договор:
/**
* Exception is thrown when request has invalid input. message contains
details regarding invalid input.
*/
exception InvalidInputException {
10: required string message;
}
/**
* Definition for the action service
*/
service TestService {
/**
* predict method takes the vector as input and spits out the
predicted output
**/
string test(
1: string request
) throws (
1: InvalidInputException iie
);
/**
* health check
**/
string ping()
}