У меня есть 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() )
есть ли возможность сделать это лучше?