优雅使用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 强制结束。

相关推荐
eyuiomvtywn5 小时前
阿里云DNS解析Vercel部署项目的域名
运维·服务器·阿里云
HUT_Tyne2656 小时前
Linux 快速入门
linux·运维·服务器
鸠摩智首席音效师6 小时前
如何在 Linux 中使用 dd 命令 ?
linux·运维·服务器
wadesir10 小时前
当前位置:首页 > 服务器技术 > 正文Linux网络HSRP协议(实现路由器热备份与高可用性的实用指南)
linux·服务器·网络
泡沫·10 小时前
4.iSCSI 服务器
运维·服务器·数据库
胡八一10 小时前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
不解不惑10 小时前
OpenAI whisper 语音识别服务器搭建
服务器·whisper·语音识别
gaize121310 小时前
适合业务规模较大的场景的服务器测评
服务器
悠悠1213811 小时前
告别Zabbix?我用Netdata只花10分钟就搞定了50台服务器的秒级监控(保姆级实战)
运维·服务器·zabbix
天庭鸡腿哥11 小时前
大小只有4K的软件,可让系统瞬间丝滑!
运维·服务器·windows·microsoft·everything