Python 程式設計 - 高階

海邊的 Kafka 與 Python Part 1 - 發佈(publish)與訂閱(subscribe)

Apache Kafka 是知名的分散式串流資料平台(distributed streaming platform),具備高效能、高吞吐量、可容錯(fault-tolerant)設計等特性,所以 Kafka 通常被應用在即時(real-time)串流資料的處理,例如應用程式產生的日誌(log)、使用者的活動紀錄(例如電子商務網站可能會紀錄使用者瀏覽哪些商品)等等。

而目前 MicroSoft, airbnb, NETFLIX, LinkedIn, LINE 等知名公司也是 Apache Kafka 的使用者,也因為有這些公司的背書,所以不太需要擔心 Apache Kafka 的成熟度及可靠度等問題。

不過單看 Apache Kafka 官網的介紹會有些難以理解其切確的功能及用途,所以本文將藉由撰寫 Python 應用程式實際認識 Kafka 的幾個主要面向與功能。

Posted on  Oct 9, 2018  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

Python Celery 教學 (1) - 介紹與初次使用

Celery 是一套頗成熟的 Distributed Task Queue 解決方案,讓我們可以非同步(asynchronous)執行任務(tasks) / 工作(jobs) ,這種非同步的作法很常見於 Web Application 。舉個例子說明適合使用 Celery 的情況也許會更清楚,假設有一使用者需要透過 Web Application 匯出一份龐大的資料(可能執行時間很長,超過 30 分鐘),在這情況之下,我們也無法要求使用者一直開著該網頁不關,這時候比較好的作法就是利用非同步的方式執行匯出資料的工作,把工作移到背景執行,然後告知使用者工作執行完畢後會透過 Email / 即時通訊軟體通知工作完成,讓使用者可以回來下載資料,如此一來,使用者就不需要一直開著網頁佔用伺服器的連線數, Celery 就是應用在這種非同步執行的情況下。

Celery 目前已經被許多公司使用(詳見 Companies/websites using Celery ),其中較知名的有 Instagram, Gandi, Red Hat, Uber 等等,所以算是蠻值得一學的 Python 模組。

本篇將學習如何使用 Celery 。

Last updated on  Nov 22, 2023  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 4 min read

Python - fcntl.flock(fd, op) 檔案鎖應用範例

flock 之前,先來聊聊為什麼會需要 flock 。

如果有多個 Processes 同時對同 1 個檔案進行讀寫操作,很容易就會發生同步問題,這時候最簡單的解決的方法就是用個鎖( Lock )確保同一時間只有 1 個 Process 可以對 1 個共用的檔案進行操作。

而 flock 就是幫忙建立 Lock 的一個機制,其原理是利用 1 個檔案作為鎖(Lock) , Process 要對某個檔案進行讀寫操作時,得先獲得鎖(Lock) 才能進行讀寫操作,其他沒獲得鎖(Lock)的 Process 則會被阻擋無法執行。

另一種常見的情況是為了確保 Crontab 內定期執行的程式同一時間只會有 1 個 Process 在執行,也會利用 flock 避免因為下一次定期執行時間到而又執行一個新的 Process 。

flock 除了可以用 flock 指令之外, Python 也內建提供 fcntl 模組幫我們建立/獲取 flock 鎖。

Posted on  May 8, 2018  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 2 min read

Python - 利用 pkgutil & importlib 打造可擴充式模組

想要建立好的 Python 專案結構,模組化是免不了的過程。此外,程式 / 系統如果還需要良好的擴充性,例如可以彈性增加 Plugin ,可以考慮利用 pkgutilimportlib 模組自動載入模組的做法。

Python 知名的 Open Source 專案 Cuckoo Sandbox 就是利用類似的做法達到可擴充性,讓人可以實作一個外掛模組,然後丟到特定資料夾後,它就能夠被執行。

Posted on  Apr 27, 2018  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read