關於 asyncio 的常見誤解

大概瞭解 asnycio 最常見的誤解是,它可以讓你執行任何並行的任務 -迴避的 GIL(全域性解釋鎖),因此並行執行阻塞作業(在單獨的執行緒)。它沒有

asyncio(以及與 asyncio 協作構建的庫)構建在協同程式上:(協作)將控制流返回給呼叫函式的函式。請注意以上示例中的 asyncio.sleep。這是一個非阻塞協程的例子,它在後臺等待,並將控制流程返回給呼叫函式(當用 await 呼叫時)。time.sleep 是阻塞功能的一個例子。程式的執行流程將停在那裡,只有在 time.sleep 完成後才會返回。

一個真實的例子是 requests 庫,它僅包含阻塞函式(暫時)。如果你在 asyncio 中呼叫它的任何函式,就沒有併發性。 aiohttp ,另一方面是充分考慮 asyncio 建。它的協同程式將同時執行。

  • 如果你有長時間執行的 CPU 繫結任務,你想並行執行 asyncio 適合你。因為你需要 threadsmultiprocessing

  • 如果你正在執行 IO 繫結作業,則可以使用 asyncio 同時執行它們。