Python Celery 教學 (3) - Workflow
本篇將延續 Python Celery 教學 (2) - AsyncResult 與執行工作 的內容,進一步介紹 2 種常見 Celery 定義的 Workflow:
- chain
- group
Last updated on Nov 22, 2023 in Python 模組/套件推薦 , Python 程式設計 - 高階 by Amo Chen ‐ 2 min read
本篇將延續 Python Celery 教學 (2) - AsyncResult 與執行工作 的內容,進一步介紹 2 種常見 Celery 定義的 Workflow:
Last updated on Nov 22, 2023 in Python 模組/套件推薦 , Python 程式設計 - 高階 by Amo Chen ‐ 2 min read
Python 是注重排版的程式語言,如果排版排得不好,閱讀的時候就會無來由的感到痛苦。
其中長字串的排版也是有些學問的,可以善用幾個小秘訣讓排版變好看,拯救壞心情!
Posted on Aug 2, 2018 in Python 程式設計 - 初階 by Amo Chen ‐ 1 min read
Python Celery 教學 (1) - 介紹與初次使用 介紹中,我們認識 Celery 幾個重要名詞與初步小小體驗使用 Celery 的過程。
本篇將會進一步介紹更多 Celery 的相關知識與使用方法,其中包括:
Last updated on Nov 22, 2023 in Python 模組/套件推薦 , Python 程式設計 - 高階 by Amo Chen ‐ 4 min read
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
談 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 專案結構,模組化是免不了的過程。此外,程式 / 系統如果還需要良好的擴充性,例如可以彈性增加 Plugin ,可以考慮利用 pkgutil 與 importlib 模組自動載入模組的做法。
Python 知名的 Open Source 專案 Cuckoo Sandbox 就是利用類似的做法達到可擴充性,讓人可以實作一個外掛模組,然後丟到特定資料夾後,它就能夠被執行。
Posted on Apr 27, 2018 in Python 程式設計 - 高階 by Amo Chen ‐ 3 min read
Python 的 json
模組十分方便,可以把 dict()
tuple()
list()
str()
int()
等資料型別轉成 JSON 字串,不過遇到像是 set()
時,就會產生以下錯誤:
>>> import json
>>> json.dumps(set())
...(略)...
TypeError: Object of type 'set' is not JSON serializable
原因在於 json.dumps()
中預設並沒有處理 set()
等型別的序列化( serialization )。
雖然如此, json.dumps()
還是有參數能夠處理這些無法被序列化的類別(class)或型別。
Posted on Mar 29, 2018 in Python 程式設計 - 中階 by Amo Chen ‐ 2 min read
本文為 Python module - jsonchema 一系列教學文:
Python module - jsonschema Part 2 中介紹了 number
, string
, array
, object
等型別的複雜用法,不過絕大多數仍是單一型別資料驗證的用法,然而實際上 JSON 資料的格式可能會由多種資料型別混合而成,例如 array
裡的元素是 object
, object
裡又有可能是 object
的情況,例如以下的 JSON 資料:
[
{
"user_id": 1,
"preference": {
"cooking": True,
"fishing": False,
}
},
{
"user_id": 1,
"preference": {
"cooking": True,
"fishing": False,
}
},
]
本篇將介紹如何撰寫符合實際使用以及更好維護的 JSON Schema 。
Posted on Mar 28, 2018 in Python 模組/套件推薦 by Amo Chen ‐ 3 min read