Django的排程工具:Django Q

首頁 >> 結帳英文 >> 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': 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 粉絲專頁
================================

guangyaw

重點主題: 程式設計: Python , Django,Android 工具與軟體: Open edX,Linux工具,Blender教學 分享各地美景與產品使用心得,遊戲實況,甚至影視戲劇等, 您的訂閱就是頻道成長的原動力。 YouTube 頻道: https://youtube.com/xyawli

You may also like...

1 Response

  1. 2019-12-24

    […] 例如之前提到過的 Django 排程工具 Django-Q 套件, […]

發表迴響