Python 程式設計 - 高階

Python 打包(packaging)與套件相依性管理系統 - Poetry

Python 專案的開發者目前大多數都會選擇 pip 或者 pipenv 作為套件相依性的管理工具,其中 pipenvPipenv: promises a lot, delivers very little 討論串中也得到不少負面評價,主要是 pipenv 一開始承諾的 features 遠多過於後來 release 的版本,而且有些反直覺的行為(e.g. Issue 3304 merge 之前 pipenv 每當安裝新套件就會強制更新 Pipfile.lock 內的所有套件版本)造成開發者困擾,雖然如此, pipenv 依然持續進化中,我們仍可對其抱持中立的態度。

不過前述的討論串中,蠻多人提到 Poetry 這套打包(packaging)與套件相依性管理系統,看來也是值得試試看的一個工具。因此本文特地介紹 Poetry 的使用方法。

Posted on  Oct 1, 2019  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read

Python Redis 發佈(publish) / 訂閱(subscribe) 範例

Redis 有個 Pub/Sub 的功能,簡單來說,就是可以發佈(publish)消息或者訂閱(subscribe)消息的功能。訂閱方跟發佈消息(message)方,都是透過所謂的 Channel 傳遞與接受訊息。

相較於選擇 RabbitMQ 這種重量級的 message broker, 如果是一些簡單的應用(Application) 其實也可以考慮選擇利用 Redis 的 Pub/Sub 達到訊息傳遞的目的。

本文簡單紀錄如何在 Python 中使用 Redis 的 Pub/Sub 。

Posted on  Apr 26, 2019  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 2 min read

Python mock 模組 - 淺談 spec, return_value, side_effect, wraps - Part 1

本文為 unittest.mock 系列文章:

Python 的測試案例(test case)寫到最後,免不了都會用上 unittest.mock 模組,原因在於有些類別、資料用 mock 的方式製造,遠遠方便於實際執行過一遍,例如測試使用者利用臉書登入,利用 mock 模擬實際臉書伺服器的回應遠比實際執行來得方便之外,也更加確保測試案例的可控制性,不會因為臉書伺服器故障或者網路問題而導致測試案例不穩定的情況發生。

然而 mock 對於初學者而言並不是十分容易理解,本文就談談 mock 中幾個重要的功能,了解這些功能之後,肯定能夠打通 mock 模組的任督二脈!

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

Python - QueueHandler & QueueListener 範例

Python logging 模組提供很多內建的 handlers ,可以依照各種不一樣的使用情況選擇不同的 handler 處理日誌(log)。

然而,關於 QueueHandlers 的說明最為吸引我的目光:

Along with the QueueListener class, QueueHandler can be used to let handlers do their work on a separate thread from the one which does the logging.

This is important in Web applications and also other service applications where threads servicing clients need to respond as quickly as possible, while any potentially slow operations (such as sending an email via SMTPHandler) are done on a separate thread.

QueueHandler 與 QueueListener 讓我們能夠把 logging 的功能用另外的執行緒(thread)執行,如此一來像是 SMTPHandler 這種耗時間會拖慢 Web 應用或是其他服務的 handler 就可以在另外的執行緒執行,讓重要的服務能夠盡快地回應用戶,避免被 logging 拖慢回應速度。

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

用 Python 學 Google Protocol Buffers - Part 1

本文為系列教學:

What I Learned from Quip on How to Build a Product on 8 Different Platforms with Only 13 Engineers 一文說明 Quip 如何用僅 13 人的人力同時建置 8 種不同平台的產品,十分值得借鏡。

該文有個很重要的概念 - Build once, use multiple times ,就是提倡減少重複打造相同元件的過程,提高元件的再利用率。而該文也揭露 Quip 大量使用 Google Protocol Buffers ,透過 Google Protocol Buffers 定義資料結構之後,就能夠在各個語言或平台上自動化產生能夠讀寫相同資料結構的程式碼,甚至能夠作為資料交換格式在各種不同平台間傳遞,降低重複開發的成本進而增加開發效率。

如此方便的工具怎能夠放過,本篇就用 Python 學習 Google Protocol Buffers 吧!

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