python - uWSGI + Flask 请求数据性能问题
问题描述
在将我们的 Flask 应用程序配置为在 uWSGI 中运行时,我遇到了一些性能问题。以前它在一个分离的 tmux 会话中运行,使用:
python application.py run
现在我已经使用以下服务文件将它重新配置为在 uWSGI 中运行:
[Unit]
Description=Flask App
After=syslog.target network.target
[Service]
Type=simple
Restart=always
RestartSec=30
User=nginx
Group=nginx
WorkingDirectory=/var/www/flaskapp
ExecStart=/bin/bash /var/www/flaskapp/run.sh
KillSignal=SIGQUIT
以及以下运行脚本(因为我们在 CentOS 7 上运行 Python 3.8,默认情况下不可用):
source scl_source enable devtoolset-9 rh-python38
source venv/bin/activate
uwsgi --ini uwsgi.ini
以及以下 INI 文件:
[uwsgi]
master = true
thunder-lock = true
http-socket = 0.0.0.0:5000
wsgi-file = application.py
virtualenv = /var/www/flaskapp/venv/
module = application:app
processes = 4
threads = 2
gid = nginx
uid = nginx
chmod-socket = 664
max-requests = 5000
harakiri = 60
socket = %dapp.sock
lazy-apps = true
vacuum = true
enable-threads = true
buffer-size = 32768
一切正常,使用ab进行测试时,我每秒确实有更多的请求,所以基本上一切都很好。但似乎在解析请求正文中的参数时(我们使用调试日志将其固定),每个请求都有一个小的延迟(我猜是 300 到 1000 毫秒之间):
from flask_restful import request
...
args['data'] = request.get_json().get('data')
是否有人知道在 uWSGI 中运行或从 shell 运行有关该请求 JSON 解析时的行为有所不同?例如,尝试打开标准输入的 500 毫秒超时(据我所知,它应该映射到 /dev/null)或什么?或者可能有一些配置错误?
编辑:使用 uWSGI 2.0.19.1 + Python 3.8.6
解决方案
如果有人正在寻找同样的问题,我找到了解决方案。
正如大多数指南建议在 uWSGI 之上使用 nginx 一样,我尝试了这一点,由于某种原因,在添加了额外的层后性能问题就消失了。
nginx配置:
location / {
root /your/path/to/app;
uwsgi_pass unix:////your/path/to/app/app.sock;
include uwsgi_params;
}
uWSGI INI:
[uwsgi]
...
chmod-socket = 664
socket = %dapp.sock
buffer-size = 32768
...
推荐阅读
- python-3.x - can not drawing decision tree with tree.export_text(clf)
- ios - 在 CAShapelayer ios swift 中添加/绘制文本
- dask - 对 XArray 中图像堆栈中的每个图像应用一个函数
- windows - 相同的 docker-compose.yml,但现在可以在 Windows 上运行
- python - Odoo13 树视图只显示一列
- javascript - 点击事件上的jQuery不适用于数据表
- visual-studio - 微服务本地开发指导
- android - Android - 将用户选择的时间转换为 UTC,反之亦然
- powershell - iText 7.1.14 'SymbolEncoding' 不是受支持的编码名称
- python - 在 Python 中通过 Socket 读取图像文件