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。當然還有很多其他的改進,你可以閱讀詳細的發布說明。
IPython7.0中await協程的例子
你可以直接在IPython交互終端中使用async/await,也可以在notebook中使用。絕大多數時候,應該都不會有問題。把IPython升級到7以上版本,IPykernel升級到5以上,你就可以愉快地使用這些關鍵字了。
Python世界中的Async
在現在的Python生態系統中,軟體包習慣於圍繞AsyncIO做標準。即便是很有經驗的程序員,有時也會覺得AsyncIO太複雜了:這個複雜度一定程度上來源於它要支持很多舊的非同步項目,比如Tornado和Twisted。當然這也是它的強大之處,一個事件循環解決所有問題。
做一個很小的非同步任務也需要你去學習AsyncIO,然後寫不少冗雜的樣板代碼。對於互動式探索來說,這樣就太麻煩了。這使得人們不願意用AsyncIO代碼做實驗。
在沒有集成async支持前,在Python的交互終端中實驗一個小的非同步任務
就像Raymond Hettinger所說的:「一定有更好的辦法」。
IPython的AsyncIO集成
經過幾個月的努力(實際上這項工作兩年前就開始了),並且很多人參與了貢獻,現在你可以直接在IPython中使用await了,結果就會像你預期的那樣。
非同步事件循環應該能夠自動啟動
有了這項集成,你就不需要導入什麼,也不需要了解asyncio的細節了。你現在可以專註於業務邏輯了。
你唯一需要記住的就是:如果你用的是一個async函數,那麼你需要通過await得到結果。
我們希望這樣能讓人們探索非同步編程時更加輕鬆。當然這不會讓你的代碼神奇地變得更快,或者自動地並行運行,它只是讓你寫起來更容易並且更好理解。
Notebook中的Async
如果你是一個Jupyter用戶,你很可能會使用一個Notebook界面,並且通過這個界面和ipykernel交互。
在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
※關於Python的10條熱門twitter
※智領雲華中區Mesos技術專題分享會
TAG:Python部落 |