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

相关推荐
一梦浮华1 小时前
自学嵌入式 day30 IPC:进程间通信
linux·运维·服务器
求索小沈1 小时前
ubuntu22.04安装anaconda
linux·运维·服务器
笑衬人心。2 小时前
项目中数据库表设计规范与实践(含案例)
服务器·数据库·设计规范
小张不嚣张꒰ঌ(˚ᆺ˚)໒꒱3 小时前
Centos7在yum当中遇到Could not resolve host: mirrorlist.centos.org解决方案
linux·运维·服务器·centos
Sally璐璐3 小时前
CentOS企业级文件服务器终极部署指南
linux·服务器·centos
DuelCode3 小时前
Windows VMWare Centos Docker部署Nginx并配置对Springboot应用的访问代理
linux·运维·服务器
myloveasuka3 小时前
信号操作集函数
linux·运维·服务器·c语言·c++·vscode
舒克起飞了4 小时前
linux系统编程——Makefile、GDB调试
linux·运维·服务器
小宁爱Python5 小时前
FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南
sqlite·html·fastapi
m0_694845576 小时前
服务器如何配置防火墙规则开放/关闭端口?
linux·服务器·安全·云计算