概述
網上關於django-q的內容很少,連配置文檔都沒有,這裏寫一篇入門文檔,一起學習。我個人感覺,django-q簡直吊打celery。在定時任務上面,設置非常簡單,也不會遇到一些奇奇怪怪的問題。
注意:這裏面對要調用的函數,使用的是字符串的方式,最開始我對這個很疑惑,不過後來才發現這樣更方便,徹底將要執行的任務函數和這個任務機制解綁,不像celery,不註冊就沒法使用。
環境搭建
注意:如果使用python3.6,請不要使用django 3.x,要用django2.x,
建議使用python3.7
另,我再windows上沒有成功運行,原因未知。
安裝
使用pip進行安裝
pip install django-q
在項目settings.py中將django_q添加到INSTALLED_APPS:
INSTALLED_APPS =(
# 其他應用
'django_q',
)
運行Django遷移以創建數據庫表:
python manage.py migrate
組態
選擇一個消息代理並配置。
這裏以redis爲例:
安裝redis需要的環境:
sudo apt install redis-server
pip3 install redis
pip3 install django-redis
注意:這裏有一個問題,redis不支持消息回執。如果對你的需求有影響建議更換消息代理。
配置settings.py文件
# settings.py示例
Q_CLUSTER = {
'name': 'myproject',#項目名稱
'workers': 4, #worker數。默認爲當前主機的CPU計數,
'recycle': 500, # worker在回收之前要處理的任務數。有助於定期釋放內存資源。默認爲500。
'timeout': 60, # 任務超時設置,如果是爬蟲任務建議設置長一些
'compress': True, # 數據壓縮
'save_limit': 250, # 限制保存到Django的成功任務的數量。0爲無限,-1則不會保存
'queue_limit': 500, # 排隊的任務數量,默認爲workers**2。
'cpu_affinity': 1, # 設置每個工作人員可以使用的處理器數量。根據經驗; cpu_affinity 1支持重複的短期運行任務,而沒有親和力則有利於長時間運行的任務。
'label': 'Django Q', # 用於Django Admin頁面的標籤。默認爲'Django Q',之後我會根據源碼做一箇中文版的django-admin頁面。如果有需求請私信我
'redis': {#如果配置了redis緩存,可以使用django的設置,請參考官方文檔。
'host': '127.0.0.1',
'port': 6379,
'db': 0, }
}
啓動
先啓動qcluster
python manage.py qcluster
再啓動django,
如果要監視集羣:
$ python manage.py qmonitor
使用以下方法檢查總體統計信息:
python manage.py qinfo
如果到這裏能夠正常運行,恭喜你,已經完成一半了。
通過頁面的方式添加任務
tasks.py
在app下創建tasks.py,該文件主要是存儲需要調用的一些方法。舉例如下:
# tasks.py
def add(a,b)
return a+b
假定這個app名字叫dj_q_test,那麼,在頁面可以這麼創建定時任務:
進去之後,這麼輸入參數:
設置運行時間:
點擊保存之後,在這裏查看就ok:
如果想要在代碼裏面執行,同樣很簡單。