我有一个应用程序使用Uvicorn
with FastAPI
。我还打开了一些连接(例如MongoDB
)。一旦出现某些信号,我想优雅地关闭这些连接(SIGINT
, SIGTERM
and SIGKILL
).
My server.py
file:
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()
功能,但使用它并不幸运......
FastAPI 允许定义需要在应用程序启动之前或应用程序关闭时执行的事件处理程序(函数)。因此,您可以使用shutdown
事件,如上所述here https://fastapi.tiangolo.com/advanced/events/#shutdown-event:
@app.on_event("shutdown")
def shutdown_event():
# close connections here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)