首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FastAPI在Uvicorn中的信号处理

FastAPI在Uvicorn中的信号处理
EN

Stack Overflow用户
提问于 2022-03-18 14:52:07
回答 1查看 1.9K关注 0票数 1

我有一个使用UvicornFastAPI的应用程序。我还打开了一些连接(例如,到MongoDB)。一旦出现信号,我想优雅地关闭这些连接(SIGINTSIGTERMSIGKILL)。

我的server.py文件:

代码语言:javascript
运行
复制
import uvicorn
import fastapi
import signal
import asyncio

from source.gql import gql


app = fastapi.FastAPI()

app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"])
app.mount("/graphql", gql)

# handle signals
HANDLED_SIGNALS = (
    signal.SIGINT,
    signal.SIGTERM
)

loop = asyncio.get_event_loop()
for sig in HANDLED_SIGNALS:
    loop.add_signal_handler(sig, _some_callback_func)

if __name__ == "__main__":
    uvicorn.run(app, port=6900)

不幸的是,我试图做到这一点的方式是行不通的。当我在终端机上尝试Ctrl+C时,什么都不会发生。我认为是因为Uvicorn是在不同的线程中启动的.

正确的做法是什么?我注意到了uvicorn.Server.install_signal_handlers()函数,但使用它并不幸运.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-18 16:17:37

FastAPI允许定义在应用程序启动之前或应用程序关闭时需要执行的事件处理程序(函数)。因此,您可以使用shutdown事件,如这里所描述的

代码语言:javascript
运行
复制
@app.on_event("shutdown")
def shutdown_event():
    # close connections here
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71528875

复制
相关文章

相似问题

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