异步 WEB 架构的特点:
gevent 为 Python 提供了比较完善的协程支持,其基于 greenlet 实现协程。 当 greenlet 遇到如网络访问、磁盘 IO 等操作时,就将自动切换至其他的 greenlet,待操作完成后,在适合的时间点回切 greenlet 继续执行。由于网络访问、磁盘 IO 等操作耗时较长,且实际 CPU 使用率较低(大部分工作由 DMA 等设备完成)。所以倘若非异步,涉及以上操作并发将以顺序执行, CPU 长期处于空闲状态。而异步模式将能实现并发程序间的切换,从而保证 CPU 有较高的利用率,而不是等待如网络访问、磁盘 IO 等操作。 注意:gevent 的使用并不能减少实际 CPU 的使用量,所以若程序的执行过程消耗的全为 CPU 资源,则其异步也是毫无意义的。 Flask+gevent 的最小程序实例: 最小程序实例如下。 from gevent import monkeymonkey.patch_all()from flask import Flaskfrom gevent import pywsgi app = Flask(__name__) @app.route('/')def index(): return 'Hello World' server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)server.serve_forever() 注意:为实现 Flask 与 gevent 的结合,需在程序开头引入 monkey patch。monkey patch 将以闭包的形式修改可以实现异步的标准库,从而实现异步。 注意:需使用支持 gevent 的 WSGI,例如:gevent.pywsgi、gunicorn 等。相关文章
- 华为ac+ap 3层组网架构web配置+命令行配置
- atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty HttpListener
- 异步HttpWebRequest,无需等待Web应用程序
- [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存
- Flask+gevent 异步 WEB 架构
- 【MyBatis】| 在WEB中应⽤MyBatis(使⽤MVC架构模式)
- 社交Web应用程序数据库设计:如何改进此架构?
- Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发WebFlux 支持两种编程风(姿)格(势) 使用@Controller这种基于注解
- [原创]Spring boot 框架构建jsp web应用
- 一问读懂Web3 架构