Celery + Django 將task按照包進行管理

背景

最近寫 Django 時遇到個問題,就是要使用 Celery 進行定時任務觸發。在配置任務函數時老是無法自動發現註冊過的任務。最終花了點心思,研究了下源碼才解決。在這裏記錄下注意點

在使用 Celery 提供的 autodiscover_tasks 方法來自動發現任務時,默認是發現在 settings 模塊裏註冊過的應用下的 tasks 模塊中包含的被 Celerytask() 裝飾器裝飾過的任務函數。

而我想將這些任務函數分開放在不同的模塊下,按照包的方式進行管理。這裏就存在三個坑,需要注意下。

注意點

  1. 爲了儘量減少對 Celery 默認邏輯的修改,包名應該爲 tasks
  2. 存在 __init__ 模塊的目錄纔是 Python 包。記得創建一個空的 __init__.py 文件。
  3. 包中定義的任務,都需要在 __init__ 模塊中進行導入,最好將這些被導入的任務函數包含在 __all__ 列表中,來避免被 flake8 掃出警告。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章