多线程
flask默认使用多进程处理请求,因此,是支持并发的。比如两个调用a.html和b.html,
- 请求a.html未运行完成,在浏览访问b.html不会阻塞。
- 开两个不同浏览器,分别请求请求运行时间较长的a.html也不阻塞。只要不用一个浏览去调,它都是不阻塞的;如果开一个浏览器在不同tab页请求同一阻塞页面,则会阻塞,这是浏览器引起的。
WSGI协议
WSGI是Web Server Gateway Interface的缩写,它是Python应用程序或者框架(如Flask)和web服务器之间的一种接口。flask默认使用werkzeug库实现WSGI协议。
只要实现了WSGI协议的任何web server都可以作为flask app的服务器,比如uWSGI, Gunicorn,mod_wsgi都可以替换Werkzeug作为 web server。
flask自带的多进程
- 在app.run()时加入参数:threaded=False, processes=5, debug=False时,可使用5个进程。
- 进入flash的app.run()函数内部,可以看到真正使用werkzeug库来实现后台服务。
- flask自带的多进程有一个问题,每次请求时进程开启,该请求运行结束进程关闭,因此无法在每个进程中保留现场,每次都做初始化,也会浪费很多时间。
gunicorn
- 如果想在flash一开始就启多个进程,可使用gunicorn
- 做如下的test.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"

Flask默认使用多进程处理请求,支持并发,但每个请求结束后进程关闭。WSGI是Python应用与web服务器的接口,Flask通过werkzeug实现。gunicorn可以预先启动多个进程,提高效率。使用gunicorn启动Flask应用,如`gunicorn-w3-b0.0.0.0:8080test:app`,可设置进程数并允许外部访问。
最低0.47元/天 解锁文章
1564

被折叠的 条评论
为什么被折叠?



