Django 3.0 将提供异步功能原生支持
去年,Django贡献者Andrew Godwin制定了将异步功能引入Django的路线图。经过大量的讨论和修改,Django技术委员会昨天批准了他的DEP 0009: Async-capable Django。
Godwin在Google群组中写道:“经过长时间的、复杂的投票,我可以宣布,技术委员会已经投票支持DEP 0009 (Async Django),因此DEP已被移至“可接受”状态。”
Godwin之所以认为这是在Django中提供异步原生支持的正确时机,是因为从2.1版本开始,它支持Python 3.5及更高版本。这些Python版本具有异步def和对协同程序的类似原生支持。此外,Web现在正在慢慢转向使用偏好高并发工作负载和大型可并行化查询的用例。
Django中异步背后的动机
Django Enhancement Proposal(DEP)0009旨在解决Python中的一个核心缺陷:低效的线程。 Python不被认为是一种完美的异步语言。它用于编写并发代码的'asyncio'库存在一些核心设计缺陷。 Python也有替代的异步框架,但它们是不兼容的。
Django Channels为Django带来了一些异步支持,但它们主要关注WebSocket处理。 DEP解释了这一动机,“同时,重要的是我们有一个计划可以为我们的用户提供直接的好处,而不是试图编写一个全新的Django大小的框架,它本身就是异步的。”
此外,大多数开发人员不熟悉开发具有异步支持的Python应用程序。还缺乏适当的文档,教程和工具来帮助他们。 Godwin认为Django可以成为帮助创建指导文档的“良好催化剂”。
DEP的目标概述要实现
DEP建议将异步Python的支持带入Django,同时保持同步Python支持以及向后兼容的方式。
以下是Godwin在其路线图中列出的最终目标:
- 在Django中创建阻塞部分,例如sessions,auth,ORM和处理程序,本地异步使用同步包装器暴露在顶部,以确保向后兼容性。
- 保持熟悉的模型/视图/模板/中间件布局完好无损,只需很少的更改。
- 确保这些更新不会影响速度并在此计划的任何阶段导致显着的性能回归。
- 允许开发人员根据需要编写完全异步的网站,但不强制将其作为编写网站的默认方式。
- 欢迎新的人才进入Djang团队,以帮助大规模的功能。
- 实现这些目标的时间表
Godwin在他的“A Django异步路线图”中分享了以下时间表:
Django 版本 | Updates |
2.1 |
目前正在进行中的发布。 没有异步工作 |
2.2 | 初始工作是添加异步ORM和视图功能,但默认情况下默认为同步,异步支持主要基于线程池。 |
3.0 | 重写内部请求处理堆栈完全异步,添加异步中间件,表单,缓存,会话,auth。 对任何仅变为异步的API启动弃用过程。 |
3.1 | 继续改进异步支持,潜在的异步模板更改 |
3.2 | 完成弃用过程并拥有一个主要是异步的Django。 |
Godwin发布了他与Google Group中Django技术委员会讨论的摘要。他们提出的一些问题是团队计划如何区分异步版本的函数/方法与同步版本,如果用户选择退出异步模式,这种实现将如何确保没有性能损失等等。
除了这些技术问题之外,董事会还提出了一个非技术问题,“Django项目多年来失去了许多贡献者,基本上处于维护模式,我们可能没有人员为这样的项目配备人员“Godwin看到了潜入这一根本挑战的大好机会 - 即重振Django项目。他补充道,“我同意观察到事情已经大幅放缓,但我个人认为像异步这样的项目正是Django需要重新开始的。现在有大量的肥沃土壤可以改变和更新不仅仅是解决五年之久的错误。“
阅读DEP 0009: Async-capable Django以了解更多详细信息。
- 如何打开Mac OSX原生的读写NTFS功能(支持OS X EI,秒杀NTFS+)
- Win10 Build 9901新功能再曝:原生支持FLAC
- Linux 上的原生 ZFS 支持已功能完备,支持 2.6.32 到 4.5 的 Linux 内核
- servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障
- [ASP]RegExp对象提供简单的正则表达式支持功能使用说明
- 在Django中使用缓存提供Session支持
- 基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)
- HttpClient_用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包
- 【商业版、提供全部源码】1000元RMB购买走火入魔C#.NET精品即时通讯组件功能源码的老大哥哥今天很高兴,还特意表扬了程序很强大、很好用、支持局域网、支持广域网
- BOOST模板库实现的功能与lua在语言层级提供的支持之比较
- 给NGUI 提供支持英文单词换行功能
- 原生javascript实现分享到朋友圈功能 支持ios和android
- Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
- servlet 3.0无需配置web.xml,使用注入方式配置servlet实现登陆功能(服务器需要支持servlet3.0)
- Android Studio 3.0 原生支持kotlin 例子详解
- Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
- 建议在压缩时使用WinRAR的恢复卷功能!(WinRAR3.0以上均支持)
- Django中扩展TinyMCE使其支持图片上传功能
- 谷歌Picasa 3.0新版提供脸部识别功能
- Django的原生NoSQL支持