2019年11月9日 星期六

Django的排程工具:Django Q


程式開發有時會遇到某些工作需要週期性運行,

在 Django 中也不例外,

今天就來教大家:

Django的排程工具:Django Q 

首先必須先安裝 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': 1800,    'retry': 120,    'queue_limit': 50,    'bulk': 10,    'orm': 'default'}


此處範例使用 Django 資料庫後台作為訊息代理( message broker )

workers:表示使用的 CPU數目,預設為當前 CPU 核心數
timeout:等待工作結束的時間

其餘設定詳細定義請參照官方網站說明

接著執行:

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 雖然方便好用,

不過有兩點要特別注意:

第一點:

不要在 window 下執行 Django Q

第二:

部署到伺服器需要開機就執行:

python manage.py qcluster

方法可參照之前提過開機自動執行程式

沒有留言: