Запуск питон-сервера с помощью gunicorn - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь настроить сервер 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()
 }
...