asyncio

Python aiomultiprocess 套件是如何運作的?

aiomultiprocess 是 1 個既實用又有趣的套件。

它實用的地方在於能將多個 coroutines 分散到多個 processes 執行(底層使用 multiprocessing 模組),藉此提升 asyncio 的效能。

而有趣的地方在於 multiprocessing 並不是 1 個 asynchronous 模組,而 aiomultiprocess 卻能將 multiprocessing 與 asyncio 整合在一起 ,著實相當有趣!

如果沒有相當的程式設計功力,其實也難以想像 aiomultiprocess 底層是如何實作的。因此本文將研究 aiomultiprocess 套件如何運作,以及如何整合 asyncio 與 multiprocessing 兩個模組的方法,揭開它的神秘面紗!

Posted on  Jul 31, 2024  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

你知道 asyncio 的 event loop 是怎麼 loop 的嗎?談 event loop 如何處理 I/O 工作

在「你知道 asyncio 的 event loop 是怎麼 loop 的嗎?談 event loop 的排程與執行」一文中,我們談了 asyncio 是如何進行工作排程與執行工作,不過沒有提到它如何處理 I/O 工作的細節(例如網路傳輸)。

本文將從知名 ASGI Web Server 開源專案 uvicorn 開始,搭配 Python asyncio 官方文件與簡單的範例,一步步介紹 event loop 是如何處理 I/O 工作。

Posted on  Jul 11, 2024  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 8 min read

用 Python 學網路程式設計重要概念 — 從 asyncio 到 asyncio 混搭 Multi-process

「 asyncio 就是快」應該是許多人對於 Python asyncio 的認知,但實際上 asyncio 就跟眾多技術一樣並不完美,它也有不擅長以及適合它的應用場景,認識這些它的缺點與優點將可以讓你在不同的應用場景上做出正確的技術決策。

本文將使用 asyncio 高階函式帶大家體驗用 asyncio 開發網路應用的感覺,並打破「 asyncio 就是快」的迷思,從而看到 asyncio 的本質!

Last updated on  Jul 25, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 10 min read

你知道 asyncio 的 event loop 是怎麼 loop 的嗎?談 event loop 的排程與執行

開發過 asyncio 相關應用的人,想必都知道 event loop 的重要性。

然而,你是否具體研究過 event loop 的程式碼,並了解它是如何運作的呢?

深入理解 event loop 不僅能幫助我們解決意料之外的問題,還能讓我們使用 asyncio 時更得心應手!

閱讀本文,讓我們跟 event loop 一起 loop 起來!

Posted on  Jun 20, 2024  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 8 min read

分分鐘教你學會使用 Python AIOHTTP

Python 知名套件 requests 一直是每位 Python 應用開發者在開發 HTTP client 的首選,不過該套件原生並不支援 asyncio, 無法受益於 asyncio 在 I/O 方面高效率的優點,因此如要增加使用 requests 的效率,通常會搭配 multiprocessingthreading 模組,透過平行(concurrent)處理提高同一時間能夠執行 HTTP 要求的數量。

所幸我們仍有 AIOHTTP 可以使用,該套件不僅提供與 requests 套件相同的功能,更原生支援 asyncio, 因此可以在不使用 multiprocessingthreading 模組的情況下,就能夠達到相當高的執行效率,如果想透過 asyncio 提高 HTTP client 的效能,不妨考慮使用 AIOHTTP 吧!

本文將透過實際範例學習如何使用 AIOHTTP 實作 HTTP client, 建議需有 asyncio 的基礎再閱讀本文為佳。

Last updated on  Aug 30, 2024  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 10 min read

Python asyncio shield 函式說明

前陣子研究 asyncio 模組時,恰好看到其中 1 個函式 wait_for() ,該函式在 coroutine 超過時限時,會將其取消(cancel),不過 asyncio 也有提供 1 個函式能夠保護 task 被取消,該函式為 shield() ,官方文件對於 shield() 函式的說明為:

Protect an awaitable object from being cancelled .

簡而言之,能夠防止 awaitables(coroutines, Tasks, Futures) 物件被取消。

不過,實際上該怎麼使用,官方文件並沒有著墨太多,因此本文將實際透過幾個範例摸索如何使用 shield() .

Posted on  Aug 15, 2021  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 2 min read

Python asyncio 從不會到上路

自從 Python 3.4 推出 asyncio 模組之後,開發者在提升 Python 程式效能的解決方案上又多了 1 種選擇。

不過相較於較為人所熟知的 multiprocessingthreading 而言,大多數初學者並不習慣非同步式(asynchronous)式的開發思維,但只要能夠掌握 asyncio 模組中幾點重要的概念,即使是從未接觸過的初學者,也能夠慢慢掌握 asyncio 的使用方式。

本文將重點介紹 asyncio 模組中的重要概念,並透過實際範例理解 asyncio 的運作,從而學會如何使用 asyncio 模組。

Last updated on  Jul 1, 2024  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 13 min read