我正在尝试托管一个python程序。它可以通过flask来托管它,但是当我将设置更改为flask + uwsgi + nginx时,会发生一些奇怪的事情:返回了具有正确结果的请求(POST)。但是在几次请求之后,它会暂停。之后,即使我重新启动所有服务,请求也会超时。
我有一个使用Ajax和jquery进行测试的UI。每次击键都会在弹性搜索中调用我的API搜索。几次尝试后超时开始,尝试次数取决于我输入的速度。
所有东西都在码头工程中运行,由docker-compose粘合。
我尝试过多种方法:
uwsgi --http 0.0.0.0:86 --wsgi-file main.py --callable application --post-buffering 1
它们都没有工作,它总是在第二次请求时超时。如果请求返回一个空主体,它将不会超时。
有趣的是,当套接字超时设置为60秒时,它实际上会从第三个请求开始超时。
以下是我的设置:
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
main.py
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)