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

相关推荐
晚风吹长发6 小时前
初步了解Linux中的信号捕捉
linux·运维·服务器·c++·算法·进程·x信号
强化试剂瓶6 小时前
Silane-PEG8-DBCO,硅烷-聚乙二醇8-二苯并环辛炔技术应用全解析
python·flask·numpy·pyqt·fastapi
herinspace6 小时前
管家婆分销软件中如何进行现金流量分配
运维·服务器·数据库·学习·电脑
(Charon)6 小时前
【网络编程】从零开始理解 io_uring:Linux 网络编程的“核动力”引擎
linux·运维·服务器
哪里不会点哪里.6 小时前
Nginx 详解:高性能 Web 服务器与反向代理
服务器·前端·nginx
历程里程碑6 小时前
Linux 10:make Makefile自动化编译实战指南及进度条解析
linux·运维·服务器·开发语言·c++·笔记·自动化
翼龙云_cloud6 小时前
阿里云渠道商:怎么实现阿里云ECI伸缩组镜像自动更新?
服务器·阿里云·云计算
2501_945837436 小时前
火山引擎hfr4i高主频实例,4.0GHz睿频突破高性能场景上限
服务器
阿湯哥6 小时前
Reactor响应式编程中Flux和FluxSink
运维·服务器·网络
桌面运维家6 小时前
vDisk考场环境网络瓶颈怎么定位?快速排查指南
运维·服务器·网络