Django的排程工具:Django Q
程式開發有時會遇到某些工作需要週期性運行,
在 Django 中也不例外,
今天就來教大家:
Django的排程工具:Django Q
Table of Contents
首先必須先安裝 Django 套件:
pip install django-q
安裝完畢需要在 Django 專案的 settings.py 找到
INSTALLED_APPS 加上:
‘django_q’
接著執行:
python manage.py migrate
選擇要使用的 Brokers,
Brokers 介於 Django 與 Django Q cluster之間,
接受、保存、交付排程工作,
需要在 settings 加上:
Q_CLUSTER = { 'name': 'DjangORM', 'workers': 1, 'timeout': 600, 'retry': 1200, 'queue_limit': 50, 'bulk': 10, 'orm': 'default'}
此處範例使用 Django 資料庫後台作為訊息代理( message broker )
workers:表示使用的 CPU數目,預設為當前 CPU 核心數
timeout:等待工作結束的時間(最好比此次排程工作花費時間長些)
retry : 超時之後,重試的時間(時間必須比timeout長)
特別應該注意的是 timeout 與 retry 兩個,
timeout 時間必須比 retry 短,
否則會出現工作尚未結束,
系統自動重試的行為。
接著執行:
python manage.py qcluster
就能開始排程工作了,
排程工作的方法有兩種:
第一種方法是直接以程式碼方式新增排程工作,
Schedule.objects.create(
func='users.views.send_mails_ii', # 填寫要執行的工作
name='send_mail_once',
schedule_type=Schedule.DAILY, # 每天重複執行
repeats=1, # 重複次數,-1代表永不停止
next_run=datetime.datetime.now()
)
第二種方法則是進到 admin 後台直接新增排程工作,
新增排程工作
前往 Django admin 後台找到 Django Q ,
從 Scheduled tasks 找到 add 按鈕,
在此頁面定義此 Task 名稱,執行的工作,周期性,重複的次數等等,
就能將工作排入等待執行。
刪除排程工作
進入管理者介面找到 DJANGO Q,
點擊 Scheduled tasks 進入 Task 列表,
勾選排程工作後,在下拉式選單中選取 Delete Selected Scheduled tasks 後,
按下 Go 送出即可刪除排程
有時候安裝不見得順風順水的,
也許會遇到:
Q_STAT = f"django_q:{PREFIX}:cluster"
這種類型的問題在於 Python 版本過舊,
需使用 Python 3.6 之後的版本,
請參照 Ubuntu 16.04 升級 Python 3.8
Django Q 雖然方便好用,
不過有兩點要特別注意:
第一點:
不要在 window 下執行 Django Q
第二:
部署到伺服器需要開機就執行:
python manage.py qcluster
================================
分享與讚美,是我們繼續打拼的原動力.
若文章對您有幫助,望請不吝按讚或分享.
或者對影片有興趣可以訂閱頻道接收通知
================================
YouTube 頻道
FB 粉絲專頁
================================
1 Response
[…] 例如之前提到過的 Django 排程工具 Django-Q 套件, […]