用 Python 學 Server-Sent Events (SSE) — 以 Flask 實作為例
你有想過 sever 端要怎麼主動通知 client 端有事件發生或資料更新嗎?
除了 WebSocket 還有沒有其他做法呢?
一起看看 1 種稱為 Server-Sent Events 的技術吧!
Posted on May 21, 2024 in Python 程式設計 - 中階 by Amo Chen ‐ 5 min read
你有想過 sever 端要怎麼主動通知 client 端有事件發生或資料更新嗎?
除了 WebSocket 還有沒有其他做法呢?
一起看看 1 種稱為 Server-Sent Events 的技術吧!
Posted on May 21, 2024 in Python 程式設計 - 中階 by Amo Chen ‐ 5 min read
在學習網路程式設計時,每個人都遇過怎麼讓 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 是經常會讓人產生混淆的事物,因為這 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 3.8 推出 1 個新的運算子 — Walrus Operator, 又稱海象運算子,其運算符號為 :=
。
Python 社群對海象運算子有一些爭議,主要是:
:=
與 =
符號太相似,難以快速識別但無論其爭議為何,海象運算子只用 1 個新的符號,就能使程式碼變得簡潔之外,還能同時滿足 Python 使用者的習慣,長遠來看其實是利大於弊。
譬如下列程式碼,在使用海象運算子之後,其實只需要 2 行即可:
x = input('> ')
while x:
print(x)
x = input('> ')
因此,學會適度使用海象運算子是可以帶來好處的!
本文將介紹海象運算子與幾個適合使用海象運算子的場景。
Posted on Apr 23, 2024 in Python 程式設計 - 中階 by Amo Chen ‐ 5 min read
本文將介紹 1 個相對少被提到的 operator 模組,該模組提供與 Python 各種運算子(operator)相對應的函式,適合喜歡 functional programming 的開發者使用,此外也有幾個高實用性的方法可以使用,不妨花一點點時間看看吧!
Posted on Apr 22, 2024 in Python 程式設計 - 中階 by Amo Chen ‐ 3 min read
每個程式設計師多多少少都有打造私人工具箱,不僅可以增加工作效率,還可以跟著職業生涯累積起來帶著走。
AI 時代來臨,工具箱當然免不了要多一些 AI 相關的工具,本文將介紹怎麼用 LangChain 結合 Python 知名套件 Streamlit 打造屬於你的個人工具箱!
Last updated on Sep 24, 2024 in LangChain , Python 程式設計 - 高階 by Amo Chen ‐ 6 min read
談到 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 這門程式語言而言,如果想要做到 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