Flask + грП C проблема - PullRequest
       79

Flask + грП C проблема

0 голосов
/ 23 апреля 2020

У меня есть flask приложение API, работающее на Win с помощью плагина apache + mod_wsgi. Я сделал сервис grp c по официальным учебным пособиям, создал сервер grp c и запустил его в качестве сервиса win (некоторые менеджеры по сервису win больше не могут его найти). В качестве клиента grp c я использовал конечную точку flask:

@web.route( '/services/<service_name>', methods=[ 'POST' ] )
def run_service( service_name ):
    #flask response object, little desinged
    resp = EmptyResp()
    try:
        chan = grpc.insecure_channel( 'my.secret.ip:6066' )
        stub = rpc.gen.services_pb2_grpc.ServicesStub( chan )
        #here just trying to find existed method, they got an Empty messasge, can't find a good solution
        rpcResp = stub.__getattribute__( service_name )( rpc.gen.services_pb2.Empty() )
        #my func to decorate response
        resp.data = ObjResp( rpcResp.state )
    except NameError as NErr:
        print( NErr )
        resp.status_code = 404
        resp.data = ErrResp( 'Cannot get RPC generated files')
    except AttributeError as AErr:
        print( AErr )
        resp.status_code = 404
        resp.data = ErrResp( 'Where is no \'%s\' method or problem with RPC files' % service_name )
    except grpc._channel._InactiveRpcError as ErrConnRPC:
        print( ErrConnRPC )
        resp.status_code = 503
        resp.data = ErrResp( 'Cannot connect with RPC service' )
    finally:
        chan.close()
    return resp

Итак, проблема в том, что первый запрос к этой конечной точке завершается с 200 и возвращением метода RP C. Но дальнейшие запросы к любой конечной точке API не отвечают вообще. Нет ошибки тайм-аута HTTP, нет сбоев приложения вообще, нет попыток запустить методы flask или gRP C (для этого я использовал print ()). Просто бесконечная загрузка. Восстанавливает только путем перезапуска служб gRP C и Apache.

Я не могу найти какое-либо решение для развертывания серверов gRP C, некоторые вопросы: 1) В чем причина, почему 2+ запроса не отвечают ; 2) Как правильно развернуть серверы gRP C на Win? 3) [Необязательно] В этой строке: stub.__getattribute__( service_name )( rpc.gen.services_pb2.Empty() ) есть ли возможность сделать это лучше?

1 Ответ

0 голосов
/ 05 мая 2020

Есть проблемы с запущенными клиентами grp c с apache + mod_wsgi, причина в том, что процессы разветвляются (и есть известные проблемы с grp c - python при разветвлении)

Refs: https://github.com/grpc/grpc/issues/13050

...