IPython 7.0發佈:Async REPL

IPython 7.0发布:Async REPL

今天,我們很高興地宣佈IPython 7.0的發佈。這個強大的Python交互終端已經遠遠超越了Python默認的交互終端,它擁有先進的自動補全,語法高亮等。它是jupyter的核心,已經被數百萬人使用,希望這裡面也有你。這是放棄Python2支持後的第二個主要版本。

不用支持Python2,讓我們能夠充分地利用起Python3的新特性,進而為IPython帶來前所未有的新能力。我們始終鼓勵各類庫的維護者和用戶瞭解Python2即將不被支持,並學習如何逐漸停止支持Python2,同時不會破壞現有Python2支持庫的安裝。

作為IPython的開發者和維護者,只需要支持一個Python版本讓我騰出了大量的時間。我不用再寫分條件的import,我可以依賴於最新的類型標註的特性....這使我的工作變得更加高效。由於IPython的開發都是志願者在業餘時間完成的,所以任何的效率提升都彌足珍貴。

我們這個版本的一個核心特性就是讓IPython能夠使用Python3.5+的新關鍵字async和await。當然還有很多其他的改進,你可以閱讀詳細的發佈說明。

IPython 7.0发布:Async REPL

IPython7.0中await協程的例子

你可以直接在IPython交互終端中使用async/await,也可以在notebook中使用。絕大多數時候,應該都不會有問題。把IPython升級到7以上版本,IPykernel升級到5以上,你就可以愉快地使用這些關鍵字了。

Python世界中的Async

在現在的Python生態系統中,軟件包習慣於圍繞AsyncIO做標準。即便是很有經驗的程序員,有時也會覺得AsyncIO太複雜了:這個複雜度一定程度上來源於它要支持很多舊的異步項目,比如Tornado和Twisted。當然這也是它的強大之處,一個事件循環解決所有問題。

做一個很小的異步任務也需要你去學習AsyncIO,然後寫不少冗雜的樣板代碼。對於交互式探索來說,這樣就太麻煩了。這使得人們不願意用AsyncIO代碼做實驗。

IPython 7.0发布:Async REPL

在沒有集成async支持前,在Python的交互終端中實驗一個小的異步任務

就像Raymond Hettinger所說的:“一定有更好的辦法”。

IPython的AsyncIO集成

經過幾個月的努力(實際上這項工作兩年前就開始了),並且很多人參與了貢獻,現在你可以直接在IPython中使用await了,結果就會像你預期的那樣。

IPython 7.0发布:Async REPL

異步事件循環應該能夠自動啟動

有了這項集成,你就不需要導入什麼,也不需要了解asyncio的細節了。你現在可以專注於業務邏輯了。

你唯一需要記住的就是:如果你用的是一個async函數,那麼你需要通過await得到結果。

我們希望這樣能讓人們探索異步編程時更加輕鬆。當然這不會讓你的代碼神奇地變得更快,或者自動地並行運行,它只是讓你寫起來更容易並且更好理解。

Notebook中的Async

如果你是一個Jupyter用戶,你很可能會使用一個Notebook界面,並且通過這個界面和ipykernel交互。

IPython 7.0发布:Async REPL

在Notebook中使用AsyncIO

為了讓Notebook中能夠運行async代碼,我們費了很大的工夫。當然這項工作的大頭是在IPython中的,IPykernel中只是在一些特殊使用場景下能保證不會出錯。你需要將IPython升級到7.0以上版本,並將ipykernel升級到5以上才能使用上面的特性。如果你使用pip,那麼命令應該是:$ pip install IPython ipykernel --upgrade升級之後,async應該在所有支持Jupyter協議的前端中都可以使用了,包括經典的Notebook、JupyterLab、Hydrogen、nteract desktop和nteract web。

未來的改進

據我所知,這是第一個智能支持Async的Python交互終端,而且由於像Trio/Curio這樣的庫還很年輕,因此可能有大量的使用場景我們還沒有考慮到。我們鼓勵你來告訴我們你的使用場景,你做了哪些嘗試,以及哪部分沒有合理地運行。我們還有一些新特性要做(關於async的高級功能、Tab補全、後臺任務等),所以我們歡迎新的貢獻者。

譯者:詩書塞外,譯文有刪減,選取了主要內容

英文原文:https://blog.jupyter.org/ipython-7-0-async-repl-a35ce050f7f7


分享到:


相關文章: