高階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告一個段落。


Advertisement

更多 iThome相關內容