Python3.5增加了內置的async和await關鍵字。 讓我們用幾個小例子來展示一下這兩個關鍵字如何使用。
如果你不明白什麼是“非同步程式設計”, 你可以簡單地理解它為“在單個進程中同時處理多個任務的一種方法”。 我們通常使用的進程經常花費大量的時間等待IO操作的完成。 這種IO操作包括用戶端請求網路、讀取檔、查詢資料庫等等....同步程式一般是等待IO操作完成後再進行下一個任務, 而非同步程式則可以在IO操作期間去處理下一個任務。
這和你準備早餐的步驟有點相似。 你煮了咖啡和茶, 但是你不會待在那裡等咖啡和茶煮好,
我們下面看一個簡單的例子, 這裡我們用asyncio.sleep模擬耗時的IO操作, 並用asyncio.wait讓它們並行運行。 在Python3.5之前, 代碼應該大概是這樣的:
這個例子中使用了原有的Python語法:裝飾器和yield關鍵字。
運行這個腳本會有這樣的輸出:
如果使用Python3.5的語法, 代碼大概是這個樣子:
新的async和await關鍵字清楚地表明我們在寫的是一個非同步函數,
然我們用Python3.5運行這個腳本:
再看一個更加複雜的例子, 我們實現一個Web伺服器, 這個Web伺服器本身還需要向其他服務發起請求。 這種情況在監控網站經常發生。 我們使用aiohttp, 一個使用asyncio構建的伺服器用戶端套件。
讓我們啟動伺服器
然後向這個伺服器發送一個請求
今天的教程就這麼多了, 希望能激起你對新語法的興趣。
英文原文:https://makina-corpus.com/blog/metier/2015/python-http-server-with-the-new-async-await-syntax
譯者:詩書塞外