flask默认非阻塞学习

简介: 学习flask的笔记

阻塞

Flask默认是不支持非阻塞IO的,表现为:

请求1未完成之前,请求2是需要等待处理状态,效率非常低。

fromflaskimportFlaskimporttimeapp=Flask(__name__)
@app.route("/test",methods=["GET"])
defwait():
time.sleep(10) #模拟阻塞IO,也可以是其它比较耗时的funcreturn"haha"@app.route("/",methods=["GET"])
defhello():
return"hello,world"if__name__=="__main__":
app.run()


请求1,先访问 http://localhost:5000/test

请求2,再马上访问 http://localhost:5000/

发现,访问请求2时,没有立即返回内容,而是等请求1处理完成后,再处理请求1

以上的阻塞,就会造成效率十分低下



非阻塞

flask默认不支持非阻塞,有几种方法可以开启


  • 启用flask多线程机制
fromflaskimportFlaskimporttimeapp=Flask(__name__)
@app.route("/test",methods=["GET"])
defwait():
time.sleep(10) #模拟阻塞IOreturn"haha"@app.route("/",methods=["GET"])
defhello():
return"hello,world"if__name__=="__main__":
app.run(threaded=True)


访问请求1,马上访问请求2,请求2并不会受请求1影响


当然,如果在同一浏览器同时访问请求1,发现还是出现了,阻塞的情况,这是浏览器的限制,用隐身模式,或换一个浏览器访问就可以看出效果



使用gevent的monkey

fromflaskimportFlaskimporttimefromgeventimportmonkeyfromgevent.pywsgiimportWSGIServermonkey.patch_all()
app=Flask(__name__)
@app.route("/test",methods=["GET"])
defwait():
time.sleep(10) #模拟阻塞IOreturn"haha"@app.route("/",methods=["GET"])
defhello():
return"hello,world"if__name__=="__main__":
# app.run(threaded=True)http_server=WSGIServer(('0.0.0.0',5000),app)
http_server.serve_forever()


访问请求1,马上访问请求2,请求2并不会受请求1影响

目录
相关文章
|
2月前
|
API 数据库 Python
二、学习 Flask之二
二、学习 Flask之二
38 0
|
7月前
|
人工智能 前端开发 算法
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
113 4
|
API 数据库 网络架构
Python Flask框架学习教程
概述: 本教程将介绍Python Flask框架的基础知识和使用方法。Flask是一个简单而灵活的Web应用框架,它具有轻量级、易用性和高度可扩展等特点。通过学习本教程,您将能够了解Flask的基本概念、安装方法、语法结构、模板使用以及实际案例,并通过练习题加深对框架的理解和应用。
|
Python
python学习之Flask框架(二)
python学习之Flask框架(二)
|
前端开发 Python
python学习之Flask框架(一)
前言:本人广西医科大学公共事业管理专业大二学生,大一开始自学python,大一期末报名了python课程学习,目前学习到flask框架(因为高中文科生和英语不太行的缘故,学习进度较慢),前面的笔记都是手写,后续笔记将会在csdn上传,希望能够记录下自己的成长过程,也希望各位社区大佬能够多多指点。
|
前端开发 Python
Flask学习与实战11:WebSocket的使用与简单通信
用这个协议最方便的就是,服务器主动向客户端推送信息。客户端也可以主动向服务器发送信息。属于应用层协议,在握手阶段还是使用了HTTP的协议。
Flask学习与实战11:WebSocket的使用与简单通信
|
数据库 Python
|
数据库 数据安全/隐私保护 Python
Flask学习与项目实战9:WTF表单验证
Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。当然还包括一些其他的功能:CSRF保护,文件上传等。安装Flask-WTF默认也会安装WTForms,因此使用以下命令来安装Flask-WTF: pip install flask-wtf。
Flask学习与项目实战9:WTF表单验证
|
存储 安全 数据安全/隐私保护
Flask学习与项目实战8:cookie与session的介绍与使用
cookie:在最开始的网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。c
Flask学习与项目实战8:cookie与session的介绍与使用
|
数据库 Python
Flask学习与项目实战7:一对一关系、管理表的映射与ORM、项目重构
上篇文章中提到了一对多关系, 也就是一个user对应多篇文章,这是一对多的关系,那么如何设置一对一的关系呢。
Flask学习与项目实战7:一对一关系、管理表的映射与ORM、项目重构