當前位置:
首頁 > 知識 > Python async/await 介紹

Python async/await 介紹

Python async/await 介紹

Python3.5增加了內置的async和await關鍵字。讓我們用幾個小例子來展示一下這兩個關鍵字如何使用。

如果你不明白什麼是「非同步編程」,你可以簡單地理解它為「在單個進程中同時處理多個任務的一種方法」。我們通常使用的進程經常花費大量的時間等待IO操作的完成。這種IO操作包括客戶端請求網路、讀取文件、查詢資料庫等等....同步程序一般是等待IO操作完成後再進行下一個任務,而非同步程序則可以在IO操作期間去處理下一個任務。

這和你準備早餐的步驟有點相似。你煮了咖啡和茶,但是你不會待在那裡等咖啡和茶煮好,而是直接去做飯或者烤麵包了。你會並行地做多件事,當其中某項完成時,你會得到一個通知(可能是你的咖啡機或者電飯煲會叫)。這樣,雖然你是一個進程,但是你能夠更高效地同時完成很多工作。

我們下面看一個簡單的例子,這裡我們用asyncio.sleep模擬耗時的IO操作,並用asyncio.wait讓它們並行運行。在Python3.5之前,代碼應該大概是這樣的:

Python async/await 介紹

這個例子中使用了原有的Python語法:裝飾器和yield關鍵字。

運行這個腳本會有這樣的輸出:

Python async/await 介紹

如果使用Python3.5的語法,代碼大概是這個樣子:

Python async/await 介紹

新的async和await關鍵字清楚地表明我們在寫的是一個非同步函數,而不是普通的生成器。

然我們用Python3.5運行這個腳本:

Python async/await 介紹

再看一個更加複雜的例子,我們實現一個Web伺服器,這個Web伺服器本身還需要向其他服務發起請求。這種情況在監控網站經常發生。我們使用aiohttp,一個使用asyncio構建的伺服器客戶端套件。

Python async/await 介紹

讓我們啟動伺服器

Python async/await 介紹

然後向這個伺服器發送一個請求

Python async/await 介紹

今天的教程就這麼多了,希望能激起你對新語法的興趣。

英文原文:https://makina-corpus.com/blog/metier/2015/python-http-server-with-the-new-async-await-syntax

譯者:詩書塞外

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

「限量閃購」《逆流而上》僅售35元包郵,只有兩本
Python書店,好書不斷

TAG:Python部落 |