文章

你知道 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 學網路程式設計重要概念 — 從多執行緒到 Multi-process, Pre-fork 再到 Multi-process 混搭 Multi-thread

在這篇文章,我們將結合先前所學到的知識,更深入地探討網路程式設計中的一些重要概念,特別是使用 Python 從多執行緒架構開始,逐步過渡到 multi-process 和 pre-fork 技術,最終結合 multi-process 和 multi-thread,形成混合式架構。

通過這些過程,我們不僅能理解這些技術背後的原理,還能掌握網路程式設計中的核心技術,並將這些概念融會貫通,為開發高效能的網路應用打下堅實的基礎。

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

用 Python 學網路程式設計重要概念 — 從 I/O 多工再到多執行緒以及 Thread Pool

在「用 Python 學網路程式設計重要概念,從單執行緒到 I/O 多工(I/O multiplexing)」 1 文中,我們利用多個 Python 範例程式學會 I/O 多工的 3 種 syscall, 分別是 select() , poll() 以及 epoll() ,藉由 I/O 多工讓程式即使只有單執行緒也能同時處理多個連線。

本文將從 I/O 多工開始,進一步延伸學習多執行緒以及 Thread Pool 這 2 個經典的網路程式設計架構。

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

淺談 UTF-8 編碼方式

很多人都知道 Python 3 開始預設使用 UTF-8 編碼(encoding),但如果問你 UTF-8 編碼是怎麼運作的?應該很多人會說不出個所以然。

例如,為什麼在 Python 使用以下程式碼會得到長度為 16:

>>> len('生日快樂🎂'.encode())

這背後的原因就跟 UTF-8 有關!

Posted on  Jun 13, 2024  in  Encoding  by  Amo Chen  ‐ 3 min read

具體說明 HTTP 標頭(header) ETag 是如何運作的

談到瀏覽器的快取,最眾所皆知的是 Cache-Control 。

但其實還有 1 個也經常被提到,那就是 ETag 。

可真要解釋 ETag 具體在做什麼、是如何運作的,以及為什麼需要 ETag, 卻又很難講得清楚(偏偏面試又會被問)。

本文將從實際的範例出發,帶你徹底了解 ETag 並提供 Python 程式碼,讓你在家也能玩!

Posted on  Jun 9, 2024  in  HTTP headers  by  Amo Chen  ‐ 5 min read

Python 模組教學 - selectors

Python 是 1 個追求易用、易學、 battery included 的程式語言, Python 有一些模組會把既有的模組包裝成高階(high-level)模組,除了更易於使用之外,因為一些實作細節或最佳實務也都幫忙打點好了,所以能讓開發者寫出更優雅、簡潔的程式碼。

本文將介紹 selectors 模組,該模組是基於 select 模組的高階模組,也是做 I/O 多工會使用的模組。

Posted on  Jun 5, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 5 min read

理解 Python 後端技術: ASGI (Asynchronous Server Gateway Interface) — WSGI 的繼承者

大家或多或少應該都聽過近年來熱門的 Python 框架 FastAPI,它其中一個特點是支援 WebSocket 。

WebSocket 與 HTTP 的不同之處在於, HTTP 是單次要求單次回應的協定,而 WebSocket 是 1 種長期連線技術,允許多次的客戶端與伺服器端互動事件發生,這意味著應用需要能夠處理持續的雙向通訊,而不僅僅是處理單一的要求和回應。

談到這裡,不知道你是否會好奇為什麼 FastAPI 能夠同時支援這 2 種截然不同的協定?

這一切都與 ASGI 脫不了關係!

本文將介紹 ASGI (Asynchronous Server Gateway Interface) ,這個被稱為 WSGI 繼承者(successor)的規範,以及 ASGI 如何賦予 FastAPI 同時支援 HTTP 與 WebSocket 的能力。

Posted on  Jun 2, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 10 min read