Python 中的 AsyncIO 基礎知識
雖然有一些方法可以在Python中實現并行編程,但它默認是單線程語言。要充分利用單線程執行的優勢,我們可以使用AsyncIO庫。
異步代碼顧名思義,AsyncIO在Python中提供了異步執行。異步代碼以非阻塞的方式運行。如果一個函數等待時間較長,可以在等待期間執行另一個任務,而不是將所有任務都暫停。
下面的圖像進一步說明了同步與異步代碼執行的區別。在等待第一個響應時,我們可以發出第二個請求以更好地利用處理能力。
盡管它不使用多線程,但它確實執行代碼的并發執行,并且在許多情況下大大減少了等待時間。
使用AsyncIOAsyncIO庫有兩個重要的關鍵字:
- async
- await 我們可以使用async def關鍵字來定義協程。 await關鍵字用在異步協程內,表示程序應該在此等待并同時執行其他操作。
看一下下面的代碼示例:
import asyncio
async def co_routine(num):print('進入協程編號:', num)await asyncio.sleep(2)print('退出協程編號:', num)
async def main():await asyncio.gather(co_routine(1),co_routine(2),co_routine(3))
asyncio.run(main())以下是輸出結果!進入協程編號:
1進入協程編號: 2進入協程編號: 3退出協程編號: 1退出協程編號: 2退出協程編號: 3正如您所見,我們在繼續執行協程2和3之前,不需要等待協程1完成執行。
讓我們逐步看一下代碼。import asyncio這樣導入asyncio庫到您的Python代碼中。async def co_routine(num):print('進入協程編號:', num)await asyncio.sleep(2)print('退出協程編號:', num)這是我們的異步協程。我們使用async def關鍵字來定義它。我們在進入時打印一條消息,然后協程休眠2秒。這里發生了魔法。await關鍵字表示我們必須等待,因此程序可以執行其他操作。await關鍵字只能在異步協程內使用!async def main():await asyncio.gather(co_routine(1),co_routine(2),co_routine(3))這定義了我們的異步主程序。asyncio.gather接受多個協程調用,并在它們并發執行后返回。這里,我們運行了值為1、2和3的協程。由于我們必須使用await關鍵字,所以我們的主程序也被定義為async。
但是,對于最終的調用,我們可以使用asyncio.run。asyncio.run(main())這將執行我們的主程序,而無需使用await。
現在,您可以在希望并發運行的程序中使用async/await。