python django异步访问_django 异步视图 - 刘江的django教程

本文介绍了Django 3.x中的异步视图功能,探讨了异步视图的使用场景和性能优势。在Django 3.1中,虽然支持异步视图,但不支持异步ORM。文章详细阐述了如何定义异步视图,以及在WSGI和ASGI模式下的性能差异。此外,还提到了同步到异步的适配函数`sync_to_async`和`async_to_sync`,并推荐使用Daphne作为ASGI服务器来充分利用异步视图的优势。
摘要由CSDN通过智能技术生成

异步视图

阅读: 931

评论:2

纵观Django的发展史和版本提升过程。1.x时代持续了多年,直到1.11结束,其实也就是3年前的事。

再往后,Django的版本号就像开了挂似的,短短3年间大版本号进入了3.x时代。

但其实对普通开发人员而言,你能感觉到的变化,就是2.0后使用path代替正则来编写url,这也是从1.x迁移到2.x甚至3.x时,唯一需要重点关注的事情。

至于3.0,嗯嗯,引入了ASGI,但无法原生支持Websocket,只是给大家打点鸡血。

而3.1,支持异步视图,但不支持异步ORM,其实也没什么太多感觉。

异步视图

在Django中,可以通过async def语法,将任何函数视图定义为异步视图。

对于类视图,则是将它的__call__()方法定义为async def,成为异步视图。

Web服务器可分为WSGI和ASGI两种模式,在不同的模式下,同步和异步视图有性能差别:

WSGI+同步视图:传统模式

ASGI+异步视图:性能最佳的异步模式

WSGI+同步视图+异步视图:传统模式混杂异步,异步视图的性能不能正常发挥

ASGI+同步视图+异步视图:异步模式混杂传统视图,异步性能最佳

WSGI 服务器下,异步视图将在其自有的一次性事件循环中运行。这意味着你可以放心使用异步特性(例如并发异步 HTTP 请求),但是你不会获得异步堆栈的好处。

ASGI的主要优点则是无需使用 Python 线程就能服务数百个连接。这就允许你使用慢流(slow streaming)、长轮询和其他响应类型。

(附ASGI官方文档地址:https://asgi.readthedocs.io/en/latest/extensions.html)

说明:

如果你的站点中没有同步的中间件,那么你将得到完全的异步请求栈的好处。如果有一个同步中间件,那么Django必须在每个请求中使用一个线程来安全地为它模拟一个同步环境。

中间件可以同时支持同步和异步上下文。Django的一些内置中间件就是这么构建的,但不是所有都这样。换句话说,就是目前你还无法原生得到完全的异步请求栈的性能。

由于ORM对数据库的访问这块依然没有实现异步处理,还是同步的。所以在一个异步视图中,你需要使用Django给你的sync_to_async() 方法将ORM操作包裹起来。例如:

from asgiref.sync import sync_to_async

results = await sync_to_async(Blog.objec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值