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

相关推荐
yzx99101333 分钟前
服务器生成图片
运维·服务器
liulilittle3 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
caolib5 小时前
无需云服务器的内网穿透方案 -- cloudflare tunnel
运维·服务器·内网穿透·tunnel·cloudflared
誰能久伴不乏6 小时前
Linux系统调用概述与实现:深入浅出的解析
linux·运维·服务器
程序员学习随笔6 小时前
Linux进程深度解析(2):fork/exec写时拷贝性能优化与exit资源回收机制(进程创建和销毁)
linux·运维·服务器
-SGlow-6 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
代码改变世界ctw7 小时前
Linux内核设计与实现 - 第14章 块I/O层
linux·运维·服务器
Dreams_l7 小时前
网络编程2(应用层协议,传输层协议)
运维·服务器·网络
誰能久伴不乏10 小时前
Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
java·服务器·前端
誰能久伴不乏12 小时前
Linux 系统调用详解:操作文件的常用系统调用
服务器·网络·servlet