Django 3.0 正式发布,开始支持异步功能

oschina
 oschina
发布于 2019年12月04日
收藏 19

Django 3.0 发布了,此版本带来了一些新特性,其中最值得关注的应当是其开始支持异步功能。

此前我们报导过,有草案提出要让 Django 支持异步。聚集于 HTTP 中间件视图和 ORM,开发者要在 Django 中添加异步支持,同时维护对同步 Python 的支持,并且将完全向后兼容。

该设想最终会替换掉 Django 中的大多数阻塞部分,包括 Session、Auth、ORM 与 Handlers 等,使其原生支持异步。而同步 API 将继续存在并得到完全支持,其中一些最终将转变为原生异步代码的同步包装器。

ASGI 模式将 Django 作为原生异步应用程序运行,原有的 WSGI 模式将围绕每个 Django 调用运行单个事件循环,以使异步处理层与同步服务器兼容。

在这个改造的过程中,每个特性都会经历以下三个实现阶段:

  • Sync-only,只支持同步,也就是当前的情况
  • Sync-native,原生同步,同时带有异步封装器
  • Async-native,原生异步,同时带同步封装器

Django 3.0 开始提供运行 ASGI 应用支持,让 Django 逐渐具备异步功能。做了这一改动后,Django 现在会感知到异步事件循环,并将阻止从异步上下文调用标记为“异步不安全”的代码(例如 ORM 操作),如果开发者之前使用的是异步代码,则可能会触发。如果看到 SynchronousOnlyOperation 错误,可以仔细检查代码并将数据库操作移到同步子线程中。

其它方面,Django 现在支持 MariaDB 10.1 及更高版本;新的 ExclusionConstraint 类可以在 PostgreSQL 上添加排除约束;输出 BooleanField 的表达式现在可以直接在 QuerySet 过滤器中使用,而无需先注解然后对注解进行过滤;自定义枚举类型 TextChoices、IntegerChoices 和 Choices 现在可用作定义 Field.choices 的方法。

此外还有一些小改动,详情查看更新说明:

需要注意的是,Django 3.0 支持 Python 3.6、3.7 与 3.8,Django 2.2.x 系列是最后一个支持 Python 3.5 的系列。官方同时也建议第三方应用作者放弃对 Django 2.2 之前的所有版本的支持。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.dbndka.com.cn]
本文标题:Django 3.0 正式发布,开始支持异步功能
加载中

精彩评论

刚刚开始的一切
刚刚开始的一切
不推荐用 Django ,不好用。
Python 不适合做 桌面 ,不适合 做 Web 应用。
比较适合 做小的,工具型 的 软件,插件。
Python 辅助有余,不堪大用。
Yu7
Yu7
你懂个diao3
wei2011
wei2011
国外社交网站instagram用的就是django,在必应国际版搜"who uses django",出来用django的十个有名的项目:https://www.netguru.com/blog/top-10-django-apps-and-why-companies-are-betting-on-this-framework
你们都是技术宅
你们都是技术宅
知乎,豆瓣等一票网站?
eechen
eechen
在保证兼容老版本代码(向后兼容)的前提下,能实现自动把同步代码在底层转为异步执行,如果是这样,确实很强.
PHP的异步库Swoole,也能在底层把PHP传统同步API转为异步执行,但会打破向后兼容性,也就是不支持旧版代码.
Swoole协程的限制体现在:
1.协程内部禁止操作全局变量和静态变量,禁止use通过引用引入外部变量.
2.禁止多个协程共用一个协程客户端.

所以期待PHP官方能在让执行PHP脚本的PHP-FPM的worker进程运行在一个协程环境内.
底层自动把同步的API比如pdo_mysql/file_get_contents等切换到异步执行,同时兼容旧代码.
总之就是不用修改代码,底层自动实现异步,避免worker进程被阻塞,能这样这就牛逼了.

最新评论(19

刘旺学长
刘旺学长
Python语言天下第一
刚刚开始的一切
刚刚开始的一切
不推荐用 Django ,不好用。
Python 不适合做 桌面 ,不适合 做 Web 应用。
比较适合 做小的,工具型 的 软件,插件。
Python 辅助有余,不堪大用。
Yu7
Yu7
你懂个diao3
你们都是技术宅
你们都是技术宅
知乎,豆瓣等一票网站?
wei2011
wei2011
国外社交网站instagram用的就是django,在必应国际版搜"who uses django",出来用django的十个有名的项目:https://www.netguru.com/blog/top-10-django-apps-and-why-companies-are-betting-on-this-framework
贫道法号-乱来
贫道法号-乱来
哈皮,你懂个鸡儿
东方星痕
东方星痕
已经3.0了啊, 记得刚毕业时才1.6还是多少。。
eechen
eechen
在保证兼容老版本代码(向后兼容)的前提下,能实现自动把同步代码在底层转为异步执行,如果是这样,确实很强.
PHP的异步库Swoole,也能在底层把PHP传统同步API转为异步执行,但会打破向后兼容性,也就是不支持旧版代码.
Swoole协程的限制体现在:
1.协程内部禁止操作全局变量和静态变量,禁止use通过引用引入外部变量.
2.禁止多个协程共用一个协程客户端.

所以期待PHP官方能在让执行PHP脚本的PHP-FPM的worker进程运行在一个协程环境内.
底层自动把同步的API比如pdo_mysql/file_get_contents等切换到异步执行,同时兼容旧代码.
总之就是不用修改代码,底层自动实现异步,避免worker进程被阻塞,能这样这就牛逼了.
五十风
五十风
ASGI离大规模使用还有一段距离的,最主要的是没有比较成熟,功能丰富的协议实现。
目前比较成熟的只有uvicorn,但也有多问题,之前为了支持websocket用过一段时间,但效果不太理想。
w
woneryf_1
666
开源中国首席罗纳尔多
开源中国首席罗纳尔多
您好,请问python用这个做web适合吗?和java比快吗?
大爱柠檬汁
大爱柠檬汁
语言本身没有适合不适合。只是java有更多的解决方案。
薛小猫
薛小猫
不能比,不合适,不要用。[狗头]
Violet_Ice紫冰
Violet_Ice紫冰
用过 java 的 Jeecg-boot,用过 node 的 ThinkJS,主用 php 的 Laravel。

1、Jeecg-boot
maven 初始化有点慢
开发难度略高
需要编译
启动速度有点慢
响应速度快

2、ThinkJS
npm 初始化看运气,几个小时都有可能
开发难度低,会 SQL 语句拿起来就能用
稳定性不是很好
响应速度快

3、Laravel
Compoer 三者里下载初始化最快的
难度比 java 低
稳定性好
响应速度比前两慢一拍
睡懒觉的猫
睡懒觉的猫
马上学习起来
Fover
Fover
Coool
薛小猫
薛小猫
学习起来。我现在用的还是2.2.4版本。
返回顶部
顶部
天津时时彩