阻塞
Flask默认是不支持非阻塞IO的,表现为:
当 请求1未完成之前,请求2是需要等待处理状态,效率非常低。
from flask import Flask import time app=Flask(__name__) route("/test",methods=["GET"]) .def wait(): time.sleep(10) #模拟阻塞IO,也可以是其它比较耗时的func return "haha" route("/",methods=["GET"]) .def hello(): return "hello,world" if __name__=="__main__": app.run()
请求1,先访问 http://localhost:5000/test
请求2,再马*问 http://localhost:5000/
发现,访问请求2时,没有立即返回内容,而是等请求1处理完成后,再处理请求1
以上的阻塞,就会造成效率十分低下
非阻塞
flask默认不支持非阻塞,有几种方法可以开启
- 启用flask多线程机制
from flask import Flask import time app=Flask(__name__) route("/test",methods=["GET"]) .def wait(): time.sleep(10) #模拟阻塞IO return "haha" route("/",methods=["GET"]) .def hello(): return "hello,world" if __name__=="__main__": app.run(threaded=True)
访问请求1,马*问请求2,请求2并不会受请求1影响
当然,如果在同一浏览器同时访问请求1,发现还是出现了,阻塞的情况,这是浏览器的限制,用隐身模式,或换一个浏览器访问就可以看出效果
使用gevent的monkey
访问请求1,马*问请求2,请求2并不会受请求1影响