python

如何用 Python 組合指令工具(Command Line Tools)?

由於現代有著各式各樣方便的程式、指令工具可以使用,我們不見得需要從頭到尾自行開發,有時候藉由 Python 膠水語言的特性,我們可以輕鬆地整合各種程式、指令工具打造適合我們或者滿足我們需求的工具,不僅省時還省力!而且實務上,我們也很常利用 Python 撰寫整合各種指令工具的程式,以高效執行自動化或者系統管理等工作。

本文將介紹使用 Python 整合各種程式、指令工具的作法。

Posted on  Jul 26, 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 的 random.shuffle() 學 Fisher-Yates Shuffle / Knuth Shuffle 演算法

最近接觸了一些牌類遊戲的開發,發現如何洗牌也是 1 個學問,所以特別查了一個重要的演算法 Fisher-Yates Shuffle / Knuth Shuffle ,發現 Python 的 random.shuffle() 也使用相同的演算法實作,所以特別將 Fisher-Yates Shuffle / Knuth Shuffle 實作細節與視覺化做出來,希望可以讓不熟悉的人也能迅速上手。

Posted on  Jul 4, 2024  in  Python 程式設計 - 初階  by  Amo Chen  ‐ 3 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 學網路程式設計重要概念 — 從多執行緒到 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