python

用 Python 學網路程式設計重要概念 — 從單執行緒到 I/O 多工(I/O multiplexing)

在學習網路程式設計時,每個人都遇過怎麼讓 sever 可以盡可能地處理更多連線的課題,要達到這個目的,多數人直覺應該會想到運用多執行緒、多 processes 的架構,為每個連線建立 1 個新的執行緒或 process 處理,但是這種方法在處理大量連線時,就顯得捉襟見肘,單就多執行緒的解決方案來說,隨著連線數上升,首先就會遇到 CPU context switch 所造成的效能問題,更遑論多 processes 架構會需要使用比多執行緒架構更多資源的問題。

但現代有很多應用僅用單執行緒就能夠處理龐大的連線數,包含 Nginx, Redis 等知名開源軟體,這些軟體是怎麼做到的呢?這就需要談到 1 種稱為 I/O multiplexing 的技術!

本文將教導 1 種稱為 I/O multiplexing 的技術,該技術能夠讓單執行緒處理多個連線,將效能壓榨出來!

p.s. 這個技術還可以與多執行緒、多 processes 架構混用

Posted on  May 12, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 15 min read

帶你搞懂 Python 的 Iterable, Iterator 與 Generator

Python 的 Iterable, Iterator 與 Generator 是經常會讓人產生混淆的事物,因為這 3 個都可以用 for 迴圈走訪,因此有些熟悉 Python 的面試官很喜歡問這 3 者之間的差異,追根究底是因為對這 3 者不熟悉的話,很容易寫出類似以下的低效率程式碼:

set([x for x in iterator])

本文將透過實際範例帶大家認識 Iterable, Iterator 與 Generator! 再也不搞混!

Posted on  May 3, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

適度用 Python 海象運算子提高程式碼可讀性與簡潔

Python 3.8 推出 1 個新的運算子 — Walrus Operator, 又稱海象運算子,其運算符號為 :=

Python 社群對海象運算子有一些爭議,主要是:

  1. 海象這個名稱不夠明白、直覺,無法讓人直接從名稱了解其用途
  2. 無法向下相容,如果你是套件開發者,用了海象運算子就會有 3.8 以前的相容問題要解決
  3. :== 符號太相似,難以快速識別

但無論其爭議為何,海象運算子只用 1 個新的符號,就能使程式碼變得簡潔之外,還能同時滿足 Python 使用者的習慣,長遠來看其實是利大於弊。

譬如下列程式碼,在使用海象運算子之後,其實只需要 2 行即可:

x = input('> ')
while x:
    print(x)
    x = input('> ')

因此,學會適度使用海象運算子是可以帶來好處的!

本文將介紹海象運算子與幾個適合使用海象運算子的場景。

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

LangChain 怎麼玩?用 Streamlit 打造 LLM 個人工具箱

每個程式設計師多多少少都有打造私人工具箱,不僅可以增加工作效率,還可以跟著職業生涯累積起來帶著走。

AI 時代來臨,工具箱當然免不了要多一些 AI 相關的工具,本文將介紹怎麼用 LangChain 結合 Python 知名套件 Streamlit 打造屬於你的個人工具箱!

Last updated on  Sep 24, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 6 min read

領域展開!用 Google Colab, JupySQL, DuckDB 實戰分析數據

談到 Python 數據分析的工具,多數人應該使用 Jupyter Notebook 搭配 pandas 進行數據分析,不過使用 pandas 還是不及使用 SQL 來得直覺一些,如果能夠在 Jupyter Notebook 中直接使用 SQL 對資料進行查詢、分析,對於精通 SQL 的人而言,將會減少需要額外學習 pandas 的成本。

恰好 JupySQL 是 1 個能夠讓我們在 Jupyter 以 SQL 對資料進行查詢、分析的擴充套件(extension),而且 JupySQL 也整合 pandas, 因此可以將查詢結果轉換成為 pandas 的 DataFrame, 除此之外更整合 DuckDB, SQLite, MySQL, PostgreSQL 等常見資料庫,讓我們能夠輕鬆以 SQL 操作各種不同來源的資料庫。

本文將以 Google Colab 搭配 JupySQL 與 DuckDB, 帶你學習 Jupyter Notebook + pandas 之外的另一種方法!

Posted on  Apr 9, 2024  in  Python 模組/套件推薦 , Python 程式設計 - 中階  by  Amo Chen  ‐ 5 min read

Python 效能之鬼!你應該學會使用的 deque !

程式的效能並不是天生具備,而是榨出來的,特別是對於 Python 這門程式語言而言,如果想要做到 High Performance 的話,有些魔鬼就藏在細節裡。

舉常見的 list 為例,你知道 list 在執行 pop(0)insert(0, value) 是效率較差的嗎?如果你的應用必須經常呼叫 pop(0)insert(0, value) 的話,建議你換個資料結構吧!使用 deque 將會帶來效率的提升!

本文將帶你認識 Python 的 deque 以及它在何種特定情況下能夠帶來效率的提升!

Posted on  Apr 1, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

LangChain 怎麼玩?用 Hugging Face 結合 LangChain,做個英文對話機器人模擬面試吧

LangChain 作為 1 個框架,讓開發者可以很輕鬆地開發語言模型相關的應用,不過語言模型還是有其極限,有些功能仍須仰賴傳統的程式設計、機器學習等領域,譬如語音辨識、語音合成等等,所幸這些功能可以藉由 Hugging Face 等平台輕鬆實現。

本文將教導如何使用 Hugging Face 上的模型,並結合 LangChain 做出可以用英文對話的機器人,讓語言模型的應用跨出文字以外的領域!

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