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

相关推荐
wanhengidc2 分钟前
巨 椰 云手机 满足多元需求
运维·服务器·安全·智能手机·云计算
liebe1*13 分钟前
第十一章 密码学
服务器·密码学·php
Lueeee.3 分钟前
内核模块符号的导出
linux·运维·服务器
LSL666_7 分钟前
12 MyBatis的连接池
java·服务器·mybatis
2301_8002561114 分钟前
第十一章 PostgreSQL 服务器编程知识点梳理(1)
服务器·数据库·postgresql
C语言魔术师17 分钟前
【linux】linux进程概念(四)(环境变量)
linux·运维·服务器
源代码•宸35 分钟前
分布式缓存-GO(简历写法、常见面试题)
服务器·开发语言·经验分享·分布式·后端·缓存·golang
秦jh_41 分钟前
【Qt】常用控件(上)
服务器·数据库·qt
坚定信念,勇往无前1 小时前
python的fastapi+uvicorn的linux离线部署
fastapi
云和数据.ChenGuang1 小时前
自动化运维工程师之ansible启动rpcbind和nfs服务
运维·服务器·运维技术·数据库运维工程师·运维教程