Flask+gevent 异步 WEB 架构

本文介绍如何使用gevent实现Python Flask应用的异步处理。通过具体代码示例展示了如何利用gevent提高Flask应用在网络IO操作时的效率,并保持CPU高利用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异步 WEB 架构的特点:

gevent 为 Python 提供了比较完善的协程支持,其基于 greenlet 实现协程。

当 greenlet 遇到如网络访问、磁盘 IO 等操作时,就将自动切换至其他的 greenlet,待操作完成后,在适合的时间点回切 greenlet 继续执行。由于网络访问、磁盘 IO 等操作耗时较长,且实际 CPU 使用率较低(大部分工作由 DMA 等设备完成)。所以倘若非异步,涉及以上操作并发将以顺序执行, CPU 长期处于空闲状态。而异步模式将能实现并发程序间的切换,从而保证 CPU 有较高的利用率,而不是等待如网络访问、磁盘 IO 等操作。 

注意:gevent 的使用并不能减少实际 CPU 的使用量,所以若程序的执行过程消耗的全为 CPU 资源,则其异步也是毫无意义的。

 

Flask+gevent 的最小程序实例:

最小程序实例如下。

from gevent import monkey

monkey.patch_all()

from flask import Flask

from 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 等。

转载于:https://my.oschina.net/u/3346994/blog/903457

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值