首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果与踏板Flask应用程序一起运行,grpc服务器会立即退出

如果与踏板Flask应用程序一起运行,grpc服务器会立即退出
EN

Stack Overflow用户
提问于 2019-05-29 18:20:03
回答 1查看 805关注 0票数 2

我试图在单个应用程序和容器中运行Flask REST API和gRPC API,但由于某种原因,gRPC服务器在启动后立即关闭。

因此,我有一个简单的Flask应用程序,它服务于几个REST端点。它有两个蓝图和引导,具有非常标准的入口点:

#!/usr/bin/env python
from app import bootstrap

app_name = os.environ.get(C.KEYS.APP_NAME_KEY)
conf_data = bootstrap.get_conf_data(app_name)
flask_app = bootstrap.get_app(app_name, conf_data)
bootstrap.register_blueprints(flask_app)

if __name__ == '__main__':
    flask_app.run()

我已经创建了一个单独的模块来实现一个简单的gRPC接口,并且我希望在同一应用程序和容器内的不同端口上同时运行这两个模块。默认的gRPC服务器实现使用futures.ThreadPoolExecutor并且是非阻塞的,所以我假设它应该能够在Flask应用程序执行的后台运行。gRPC服务器引导程序如下所示:

import grpc
from concurrent import futures

from svc.auth_grpc import auth_pb2, auth_pb2_grpc


def start_server():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=1),
                         maximum_concurrent_rpcs=1)
    auth_pb2_grpc.add_AuthServiceServicer_to_server(AuthServiceServicer(),
                                                    server)
    server.add_insecure_port(f'0.0.0.0:9091')
    server.start()

由于我的目标是让gRPC和Flask共存--我将gRPC bootstrap添加到应用程序入口点,如下所示:

if __name__ == '__main__':
    start_server()
    flask_app.run()

我预计gRPC将启动一个线程并无限期地在后台运行,而Flask将执行标准的阻塞自举,并将运行在前台。所有这些都是在启动时发生的,但是在Flask启动后的下一秒,gRPC queue CompletionQueue收到一个SHUTDOWN事件,服务器退出。

我不知道为什么会发生这个事件,也不知道是什么触发了它,我也不能更深入地研究CompletionQueue,因为它底层是Cython实现。

另外,gRPC服务器和Flask应用程序可以正常运行,其余代码保持不变。

如何使这两个事件循环共存?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56358272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档