天天看點

python asyncio的幾個能力段位

作者:SuperOps
python asyncio的幾個能力段位

python asyncio

asyncio的知識點分級

在 asyncio 中的重要程度和使用頻率的級别。這些級别是主觀的,可以根據使用者的需求和經驗不同而有所不同。通常,級别越高,這個概念的重要性和使用頻率就越高。基于我對asyncio使用的認知我分為以下幾個基本級别和對應的概念以及實作。

級别 概念 實作
9 Network: streams StreamReader, StreamWriter, asyncio.open_connection()
8 Network: TCP & UDP Protocol, BaseTransport
7 Network: transports asyncio.start_server()
6 Tools asyncio.Queue
5 Subprocesses & threads run_in_executor(), asyncio.subprocess
4 Tasks asyncio.Task, asyncio.create_task()
3 Futures asyncio.Future
2 Event loop asyncio.run(), BaseEventLoop
1 Coroutines async def, async with, async for, await

級别1: 以協程(coroutine)為基礎的異步程式設計模型,包括 async def、async with、async for 和 await 等關鍵字。

掌握1級别的内容可以讓你使用 Python asyncio 實作異步程式設計,包括但不限于以下幾個方面:

  • 協程的使用:了解 async def、async with、async for 和 await 等關鍵字,以及如何定義和調用協程。
  • 異步的執行和等待:使用 asyncio.run() 函數運作異步程式,使用 await 等待異步操作的完成。
  • 異常處理:在協程中捕獲和處理異常,包括使用 try/except 和 asyncio.gather() 中的異常處理方式。
  • 并發控制:使用 asyncio.Lock 和 asyncio.Event 等工具控制并發,避免資源競争和死鎖。
  • 協程間通信:使用 asyncio.Queue 和 asyncio.Future 等工具在協程之間進行通信和協作。

掌握 級别1 的内容是使用 asyncio 進行異步程式設計的基礎,可讓你寫出高效的異步代碼,處理高并發的請求和事件。

級别2: 事件循環(event loop),包括 BaseEventLoop 和 asyncio.run() 等實作,是 asyncio 庫的核心。

掌握 級别 2 級别的内容可以讓你更深入地了解和使用 Python asyncio,包括但不限于以下幾個方面:

  • 了解事件循環的概念和實作:掌握 BaseEventLoop 和 asyncio.run() 等子產品的使用,了解事件循環的運作機制,包括事件循環的作用、事件循環的運作順序和控制流程等。
  • 多個事件循環的協同:了解 asyncio.run_coroutine_threadsafe() 和 asyncio.run_until_complete() 等方法控制多個事件循環的協同工作,實作高效的異步程式設計。
  • 定時器和延遲操作:使用 asyncio.sleep() 和 BaseEventLoop.call_later() 等方法實作定時器和延遲操作,控制異步操作的執行時間。
  • 信号處理:了解 signal 子產品和 BaseEventLoop.add_signal_handler() 等方法處理作業系統信号,實作對異步程式的控制和管理。
  • 進階事件循環的使用:包括 asyncio.AbstractEventLoop 和 asyncio.ProactorEventLoop 等子產品的使用,實作更高效和可擴充的異步程式設計。

掌握 級别 2 的内容可以幫助你更深入地了解和掌握 asyncio,擴充異步程式設計的應用場景,實作更高效和可靠的異步程式。

級别3: Futures,一個異步可等待對象,表示異步操作的結果。

掌握 級别 3 級别的内容可以讓你更深入地掌握 Python asyncio 中的 Futures,包括但不限于以下幾個方面:

  • Futures 的概念和使用:掌握 asyncio.Future 的使用方法,了解 Futures 的概念和作用,包括如何建立和使用 Futures,以及如何等待 Futures 對象的完成。
  • 錯誤處理和回調函數:了解如何處理 Futures 中的錯誤和異常,包括使用 try/except 和 Futures.add_done_callback() 等方法,以及如何使用回調函數處理 Futures 的結果。
  • 并發程式設計:使用 asyncio.gather() 和 asyncio.wait() 等方法實作 Futures 的并發執行,提高異步程式的效率和性能。
  • 取消 Futures:了解如何取消 Futures 對象的執行,包括使用 asyncio.wait_for() 和 Futures.cancel() 等方法處理取消操作。
  • 異步上下文:掌握 asyncio.Task.current_task() 和 asyncio.Task.all_tasks() 等方法,了解異步上下文的使用和管理。

掌握 級别3 的内容可以幫助你更深入地了解和掌握 Python asyncio 中 Futures 的使用方法和注意事項,提高異步程式設計的效率和可靠性。

級别4: Tasks,用于排程協程的對象,通常由 asyncio.create_task() 建立。

掌握 4 級别的内容可以讓你更深入地掌握 Python asyncio 中的 Tasks,包括但不限于以下幾個方面:

  • Task 的概念和使用:了解 asyncio.Task 的使用方法,包括如何建立和啟動 Task,以及如何等待 Task 對象的完成。
  • 錯誤處理和回調函數:了解如何處理 Task 中的錯誤和異常,包括使用 try/except 和 Task.add_done_callback() 等方法,以及如何使用回調函數處理 Task 的結果。
  • 取消 Task:了解如何取消 Task 對象的執行,包括使用 Task.cancel() 方法處理取消操作。
  • 并發程式設計:使用 asyncio.gather() 和 asyncio.wait() 等方法實作 Task 的并發執行,提高異步程式的效率和性能。
  • Task 的狀态和屬性:了解 Task 對象的狀态和屬性,包括 Task 的執行狀态、Task 的協程和異常等資訊。

掌握 級别 4 的内容可以幫助你更深入地了解和掌握 Python asyncio 中 Task 的使用方法和注意事項,提高異步程式設計的效率和可靠性。

級别5: Subprocesses & threads,用于在 asyncio 中啟動子程序或線程,包括 run_in_executor() 和 asyncio.subprocess 等子產品。

掌握 5 級别的内容可以讓你更深入地掌握 Python asyncio 中的 Subprocesses & threads,包括但不限于以下幾個方面:

  • 在協程中啟動子程序:了解如何使用 asyncio.create_subprocess_exec() 和 asyncio.create_subprocess_shell() 方法在協程中啟動子程序,以及如何與子程序進行互動。
  • 在協程中啟動線程:了解如何使用 asyncio.run_in_executor() 方法在協程中啟動線程,以及如何在協程和線程之間進行資料交換。
  • 處理子程序的輸出和錯誤:了解如何使用 asyncio.subprocess.PIPE 和 asyncio.subprocess.STDOUT 等參數處理子程序的輸出和錯誤資訊。
  • 處理線程的傳回值:了解如何使用 asyncio.wrap_future() 方法将線程的傳回值轉換為 Future 對象,以便在協程中進行處理。
  • 實作高效的異步程式設計:了解如何使用 asyncio.run_in_executor() 和 asyncio.create_subprocess_exec() 等方法實作高效的異步程式設計,提高異步程式的效率和可靠性。

掌握 級别5 的内容可以幫助你更深入地了解和掌握 Python asyncio 中 Subprocesses & threads 的使用方法和注意事項,實作更高效和可靠的異步程式設計。

級别6: Tools,包括 asyncio.Queue,提供了在協程之間通信的工具。

掌握 6 級别的内容可以讓你更深入地掌握 Python asyncio 中的 Tools,包括但不限于以下幾個方面:

  • asyncio.Queue 的使用:了解如何使用 asyncio.Queue 實作協程之間的消息傳遞,以及如何處理 Queue 中的資料。
  • asyncio.LifoQueue 和 asyncio.PriorityQueue 的使用:了解如何使用 asyncio.LifoQueue 和 asyncio.PriorityQueue 實作後進先出和優先級隊列。
  • asyncio.Semaphore 的使用:了解如何使用 asyncio.Semaphore 實作并發控制,控制協程的并發數量。
  • asyncio.Lock 和 asyncio.Event 的使用:了解如何使用 asyncio.Lock 和 asyncio.Event 實作臨界區控制和事件通知機制。
  • asyncio.Condition 和 asyncio.Barrier 的使用:了解如何使用 asyncio.Condition 和 asyncio.Barrier 實作協程之間的同步和協作。

掌握級别 6 的内容可以幫助你更深入地了解和掌握 Python asyncio 中 Tools 的使用方法和注意事項,實作更高效和可靠的異步程式設計。

級别7: Network: transports,用于傳輸資料的協定層,包括 asyncio.start_server() 和 BaseTransport 等。

掌握 7 級别的内容可以讓你更深入地掌握 Python asyncio 中的 Protocols,包括但不限于以下幾個方面:

  • 協定的概念和實作:掌握 asyncio.Protocol 的使用方法和實作原理,了解協定的作用和生命周期。
  • 傳輸層的實作和使用:了解 asyncio.Transport 的使用方法和實作原理,包括如何建立和關閉傳輸層,以及如何處理傳輸層的事件和資料。
  • 使用協定實作網絡應用:了解如何使用 asyncio.Protocol 和 asyncio.Transport 實作網絡應用,包括如何實作基于 TCP 和 UDP 的網絡通信和協定。
  • 流量控制和擁塞控制:了解如何使用 asyncio.FlowControlMixin 和 asyncio.StatsProtocolMixin 實作流量控制和擁塞控制,提高網絡應用的性能和可靠性。
  • SSL/TLS 的支援和應用:了解如何使用 asyncio.SSLProtocol 和 asyncio.start_tls() 實作 SSL/TLS 的支援和應用,保障網絡通信的安全性。

掌握 級别 7 的内容可以幫助你更深入地了解和掌握 Python asyncio 中的 Protocols 的使用方法和注意事項,實作更高效和可靠的網絡應用。

級别8: Network: TCP & UDP,包括 Protocol,用于處理 TCP 和 UDP 連接配接。

掌握 8 級别的内容可以讓你更深入地掌握 Python asyncio 中的 asyncio.Streams,包括但不限于以下幾個方面:

  • asyncio.StreamReader 和 asyncio.StreamWriter 的使用:了解如何使用 asyncio.StreamReader 和 asyncio.StreamWriter 實作基于流的資料傳輸,包括如何讀取和寫入資料,以及如何控制緩沖區和流的狀态。
  • 使用 asyncio.Streams 實作網絡應用:了解如何使用 asyncio.StreamReader 和 asyncio.StreamWriter 實作網絡應用,包括如何實作基于 TCP 和 UDP 的網絡通信和協定。
  • 流量控制和擁塞控制:了解如何使用 asyncio.FlowControlMixin 和 asyncio.StatsProtocolMixin 實作流量控制和擁塞控制,提高網絡應用的性能和可靠性。
  • SSL/TLS 的支援和應用:了解如何使用 asyncio.SSLProtocol 和 asyncio.start_tls() 實作 SSL/TLS 的支援和應用,保障網絡通信的安全性。

掌握 級别 8 的内容可以幫助你更深入地了解和掌握 Python asyncio 中的 Streams 的使用方法和注意事項,實作更高效和可靠的網絡應用。

級别9: Network: streams,包括 StreamReader、StreamWriter 和 asyncio.open_connection() 等子產品,用于在協程中直接處理流資料。

掌握 9 級别的内容可以讓你更深入地掌握 Python asyncio 中的 asyncio.Synchronization Primitives,包括但不限于以下幾個方面:

  • asyncio.Lock 和 asyncio.Event 的使用:了解如何使用 asyncio.Lock 和 asyncio.Event 實作臨界區控制和事件通知機制。
  • asyncio.Semaphore 的使用:了解如何使用 asyncio.Semaphore 實作并發控制,控制協程的并發數量。
  • asyncio.Condition 和 asyncio.Barrier 的使用:了解如何使用 asyncio.Condition 和 asyncio.Barrier 實作協程之間的同步和協作。
  • asyncio.Queue 和 asyncio.LifoQueue 的使用:了解如何使用 asyncio.Queue 和 asyncio.LifoQueue 實作協程之間的消息傳遞,以及如何處理 Queue 中的資料。
  • asyncio.PriorityQueue 的使用:了解如何使用 asyncio.PriorityQueue 實作優先級隊列。

掌握 級别 9 的内容可以幫助你更深入地了解和掌握 Python asyncio 中的 Synchronization Primitives 的使用方法和注意事項,實作更高效和可靠的異步程式設計。

如果想快速搞定python asyncio打到頂級段位,可以檢視我的技術專欄《python asyncio從入門到精通》裡面彙總了我對asyncio的各種知識點的經驗總結和生産最佳實踐,專欄每周一更,學的輕松。