Python热门框架Django 3.0将加入异步支持

高端Python网页开发框架Django的技术委员会,核准了异步功能提案DEP 0009,预计将会正式出现在Django 3.0中,以更好的支持网页使用案例。

去年6月,Django贡献者Andrew Godwin提出了将异步功能加入Django的草案,主要支持WebSocket,而现在已经被Django的技术委员会接受。Andrew Godwin表示,虽然目前没有明显立即扩展Django,来处理WebSockets这类非HTTP协议的理由,但是在Django传统MTV(Model-View-Template)模式中支持异步程序代码,将会带来许多优点,

他提到,Python的核心缺陷之一是性能低落的线程,但是当前Python网页服务器这类的高并行工作负载,以及大量平行化的查询,却需要依赖足够的线程,才能够有效率的执行,Django异步功能的出现,就是要来解决这个问题,避免过长的上下文切换时间。

Python被认为不是个完美的异步语言,Andrew Godwin也指出,其用于撰写并行程序代码的函数库asyncio,存在一些核心设计缺陷,虽然Python有其他替代的异步框架,但是却乏兼容性,而既然网页应用已经与过去不同,Django也必须做出变化。

异步提案的目标,是要将Python的异步支持带到Django中,同时维持对同步Python的支持,并提供向后兼容性。最终会置换Django中大多数阻塞式(Blocking)的部分,包括对话(Session)、Auth、对象关系映射(ORM)以及处理程序(Handlers)等,使其原生支持异步,尽管过程会需要修改Django的MTV以及中间件,但是会尽量维持开发者熟悉的布局。

这项工程会在Django 2.2开始进行初步的工作,增加异步ORM以及View,但是所有的默认都仍维持同步的形式,而所有异步支持都使用线程池(Thread Pool)的模式。在Django 3.0则会重写内部请求处理堆栈,增加异步中间件、表单、缓存、对话、Auth,以完全支持异步功能,Django 3.1会继续对细部功能进行改善,并更新潜在异步模板,所有工作会在Django 3.2告一个段落。