首页 > 解决方案 > 几次 POST 请求后 uwsgi 超时

问题描述

我正在尝试托管一个 python 程序。它可以通过flask托管它,但是当我将设置更改为flask + uwsgi + nginx时,会发生一些奇怪的事情:请求(POST)返回了正确的结果。然而,在几次请求之后,它就会超时。之后,即使我重新启动所有服务,请求也会超时。

我有一个使用 Ajax 和 jquery 进行测试的 UI。每次击键都会调用我在 elasticsearch 中的 API 搜索。几次尝试后超时开始,尝试次数取决于我输入的速度。

一切都在 docker 内部运行,由 docker-compose 粘合。

我尝试了多种方法:

他们都没有工作,它总是在第二个请求时超时。如果请求返回空正文,则不会超时。

有趣的是,当 socket-timeout 设置为 60s 时,它实际上有时会从第三个请求开始超时。

以下是我的设置:

Nginx

server {listen <myport>;
server_name <myip>;
root /usr/share/nginx/html;
location / {
    uwsgi_read_timeout 60s;
    include uwsgi_params;
    uwsgi_pass unix:///tmp/uwsgi.sock;
} }

uwsgi

[uwsgi] 
socket = /tmp/uwsgi.sock 
chown-socket = www-data:www-data
chmod-socket = 664 
uid = www-data 
gid = www-data 
cheaper = 0 
processes = 1
socket-timeout = 60 
single-interpreter = true
wsgi-file = main.py 
callable = application

主文件

from flask import Flask, jsonify, render_template, request
from <myfile> import _myapiworker
application = Flask(__name__)
@application.route('/_myapi', methods=['POST'])
def myapi():
    req_data = request.get_json()
    <assembling post body>
    res_str = _myapiworker(<post body>)
    return jsonify(res_str)
@application.route('/')
def index():
    return render_template('index.html')
if __name__ == '__main__':
    application.run(host='0.0.0.0', debug=True, port=80)

标签: dockerelasticsearchnginxflaskuwsgi

解决方案


推荐阅读