Flask + gRPC 的麻烦

Flask + gRPC trouble

我有一个 flask API 应用程序 运行ning on Win by apache + mod_wsgi 插件。 我通过官方教程制作了一个grpc服务,创建了grpc服务器并将其运行设置为一个win服务(由一些win服务管理器提供,现在找不到了)。作为 grpc 客户端,我使用了一个烧瓶端点:

@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 和 return 的 RPC 方法完成的。 但是对 api 的任何端点的进一步请求根本没有响应。没有 HTTP 超时错误,根本没有应用程序崩溃,没有尝试 运行 flask 或 gRPC 方法(我为此使用了 print() )。只是无限加载。仅通过重新启动 gRPC 和 Apache 服务进行修复。

我找不到任何部署 gRPC 服务器的解决方案,我的问题是: 1)2+请求没有响应的原因是什么; 2) 在 Win 上部署 gRPC 服务器的正确方法是什么? 3) [可选] 在这一行中:stub.__getattribute__( service_name )( rpc.gen.services_pb2.Empty() ) 是否有更好的选择?

使用 apache + mod_wsgi 的 grpc 客户端存在问题 运行,原因似乎是进程的分叉方式(并且 grpc-python 在分叉时存在已知问题)

参考: https://github.com/grpc/grpc/issues/13050