优雅使用Gunicorn进程管理FastAPI

别再使用kill -9了!!!别再使用kill -9了!!!别再使用kill -9了!!!

事情的起因是这样:

最新给FastAPI增加定时任务,使用APScheduler模口来控制。并在app的life_span中启动任务调度器,那么应该在app关闭时也销毁调度器。我使用Gunicorn来管理uvicorn的进程。要重启时使用

bash 复制代码
kill -9 [pid]

发现任务调度器并没有正确销毁退出,也就是FastAPI的life_span函数yield的结束逻辑没有被执行。

原因是kill -9强制退出进程,uvicorn来不及释放资源。

优雅的方案

你如果这用启动FastAPI应用程序:

bash 复制代码
gunicorn -D -w 1 -k uvicorn.workers.UvicornWorker main:app --bind 127.0.0.1:8000

可以使用如下命令查看gunicorn进程:

bash 复制代码
# 列出详细信息,包括PID和管理的端口号
ps aux | grep gunicorn
# 列出PID和名称
pgrep -f gunicorn -l

那么停止时,别再使用kill -9了,使用如下命令:

bash 复制代码
# 关闭使用8000端口的gunicorn
pkill -f "gunicorn.*8000"
# 也可以不加引号
pkill -f gunicorn.*8000

Gunicorn会等待uvicorn停止并释放资源,执行完FastAPI的停止逻辑后,才最终停止。

PS:

如果最终实在无法关闭,才使用kill -9 强制结束。

相关推荐
oMcLin1 小时前
如何在Manjaro Linux上配置并优化Caddy Web服务器,确保高并发流量下的稳定性与安全性?
linux·服务器·前端
济6171 小时前
linux(第七期)--gcc编译软件-- Ubuntu20.04
linux·运维·服务器
星辰烈龙3 小时前
黑马程序员JavaSE基础加强d5
服务器·网络·php
浩子智控3 小时前
分区操作系统、容器化、虚拟机的概念
服务器·系统安全
小宇的天下3 小时前
Calibre 3Dstack --每日一个命令day7【Centers】(3-7)
java·服务器·数据库
济6173 小时前
linux(第九期)--交叉编译器-- Ubuntu20.04
linux·运维·服务器
zxdzxdzzxd3 小时前
Tailscale Linux 登录指南
linux·运维·服务器
2501_945837434 小时前
云服务器高可用运维的核心逻辑与实操
服务器
咕噜签名-铁蛋4 小时前
云服务器GPU:释放AI时代的算力引擎
运维·服务器·人工智能
阿巴~阿巴~4 小时前
“可达”方能“可靠”:深入解析网络层在TCP通信中的基石作用
运维·服务器·网络·网络协议·tcp/ip·ip·tcp