我已经开发了一个酒瓶应用程序,它在开发阶段很好地工作,但当我建立生产过程与Gunicorn,性能下降了很多。
我跟随本教程和Gunicorn一起制作电影。
我的应用程序使用socket-io,因此服务器按照设计的开发模式实时捕获请求,但是使用Gunicorn时,请求甚至延迟了很多,或者根本没有到达服务器。
我以不同的方式运行Gunicorn,更改了工作人员、线程和应用程序,如下所示。
sudo gunicorn --bind 0.0.0.0:5000 --workers 2 wsgi:app
sudo gunicorn --bind 0.0.0.0:5000 --workers 2 app:app
sudo gunicorn --bind 0.0.0.0:5000 --workers 3 --threads 3 wsgi:app
sudo gunicorn --bind 0.0.0.0:5000 --workers 3 --threads 3 app:app
sudo gunicorn --bind 0.0.0.0:5000 --workers 8 --threads 4 wsgi:app
sudo gunicorn --bind 0.0.0.0:5000 --workers 8 --threads 4 app:app我的wsgi.py
from app import app
if __name__ == '__main__':
app.run()我的app.py
#!/usr/bin/env python
from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.url_map.strict_slashes = False
socketio = SocketIO(app)
from control.control import *
from video_streaming import video_streaming_blueprint
app.register_blueprint(video_streaming_blueprint)
def disable_logs(app, disable):
import logging
log = logging.getLogger('werkzeug')
log.disabled = disable
app.logger.disabled = disable
if __name__ == '__main__':
disable_logs(app=app, disable=True)
socketio.run(app=app, host='0.0.0.0', debug=False)发布于 2020-09-06 13:17:57
Flask包有详细的部署指令。
要获得良好的性能,需要将WebSocket添加到服务器中。为此,您将不得不使用一个异步工作人员进行gunicorn,无论是gevent还是eventlet。
使用多个工作人员是可能的,但通常不需要使用,因为异步工作人员处理他们自己的一致性。如果您确实希望使用多个工作人员,那么需要添加一个负载均衡器(如nginx )和一个消息队列(如redis或rabbitmq )。
https://stackoverflow.com/questions/63754543
复制相似问题