uWSGI 是一个高性能的 WSGI 服务器,广泛用于部署 Python Web 应用程序。它支持多种协议(如 WSGI、HTTP、FastCGI、SCGI 和 uWSGI 协议),并具备多进程和多线程架构,适合高并发场景。
作为python 应用级服务器,一般常与代理服务器Nginx一起使用。相对于Gunicorn、Daphne和Waitress以及Mod_WSGI而言,虽然相对uWSGI较为简单,但是性能和功能方面,都不如uWSGI
安装 uWSGI
pip install uwsgi
安装完成后,记得检查一下
uwsgi --version
注意:如果在windows中使用,可能会发送报错,可以使用conda安装或者在linux中操作
配置文件
创建一个 uwsgi.ini 的配置文件,用于写uwsgi的一些配置。
[uwsgi]
module = wsgi:app
home = /your/path
master = true
processes = 4
http-socket = 0.0.0.0:5000
threads = 2
module 一般是指定用模块, wsgi是模块名(改为自己的), app是程序实例化名
home = /your/path 设置自身虚拟环境变量位置
master = true 启用主进程,允许 uWSGI 在后台管理工作进程。
processes 设置工作进程
http-socket 启动一个 HTTP 服务,监听所有 IP 地址的 8000 端口
thredas 每个进程启用2个线程
基本使用
如果项目已经创建好了, 那么就将 uwsgi.ini 文件放入项目根目录中。启动项目
uwsgi --ini uwsgi.ini
假如项目是使用Flask,那么,在一个文件中启动flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "uWSGI 正在启动"
if __name__ == "__main__":
app.run()
uwsgi --ini uwsgi.ini
通过uwsgi命令启动uwsgi服务。在浏览器中输入IP+端口号进行访问。
uWSGI 通常与 Nginx 搭配使用,Nginx 负责处理静态文件和反向代理请求到 uWSGI。一般需要先配置 Nginx 来代理请求。因为uWSGI只是个应用服务器,处理动态请求。
uwsgi.ini配置详解
1. [uwsgi] 部分 socket: 指定 uWSGI 监听的套接字路径或 IP 地址和端口。----示例:socket = 127.0.0.1:8000 或 socket = /tmp/uwsgi.sock。 http: 如果 uWSGI 直接作为 HTTP 服务器运行,可以使用 http 参数指定监听地址和端口。----示例:http = 127.0.0.1:8000。 chdir: 指定 uWSGI 启动时的工作目录。----示例:chdir = /home/python/Desktop/projects/test。 module: 指定 WSGI 应用的模块路径,格式为 module = myapp.wsgi:application。 wsgi-file: 指定 WSGI 应用的 Python 文件路径。----示例:wsgi-file = test/wsgi.py。 callable: 指定 WSGI 应用的可调用对象名称。----示例:callable = app。 processes: 指定 uWSGI 启动的工作进程数。----示例:processes = 4。 threads: 指定每个工作进程的线程数。----示例:threads = 2。 master: 是否启用主进程模式,主进程负责管理子进程。----示例:master = true。 pidfile: 指定主进程的 PID 文件路径,用于管理 uWSGI 进程。----示例:pidfile = uwsgi.pid。 daemonize: 指定 uWSGI 是否以后台守护进程方式运行,并设置日志文件路径。----示例:daemonize = uwsgi.log。 vacuum: 是否在进程退出时清理临时文件和套接字文件。----示例:vacuum = true。 chmod-socket: 设置套接字文件的权限。----示例:chmod-socket = 660。 2. [socket] 或 [http] 部分 listen: 设置套接字的监听队列大小。----示例:listen = 100。 buffer-size: 设置请求和响应的缓冲区大小。----示例:buffer-size = 32768。 3. [application] 部分 module: 指定 WSGI 应用的模块路径。----示例:module = myapp.wsgi:application。 callable: 指定 WSGI 应用的可调用对象名称。----示例:callable = app。
查看 uWSGI 服务进程
ps aux | grep uwsgi
启动uWSGI服务进程
uwsgi --ini uwsgi.ini
# 在后台运行uWSGI服务,不再在控制台打印日志
uwsgi -d --ini uwsgi.ini
关闭uWSGI服务进程
# 通过 uwsgi.pid 文件
uwsgi --stop /path/to/uwsgi.pid
# 使用 kill 命令发送 TERM 信号
kill -TERM 12345 67890
# 使用 kill -9 强制终止进程
kill -9 12345 67890
此文章只简单记录一下uWSGI(笔记),uWSGI+Nginx 详细使用在下一篇文章