Django非同步任務Celery
阿新 • • 發佈:2021-12-24
將任務分配給其他的程序去執行,django的主程序只負責發起任務,而執行任務的不在使用django的主程序。Python有一個很棒的非同步任務框架,叫做celery。
Django為了讓開發者開發更加方便,集成了celery,形成了django-celery外掛
1.安裝django-celery
#Redis模組的相容不穩定,必須安裝2.10.6 pip install django-celery pip install django-redis pip install redis==2.10.6
django-celery只是將任務釋出出去,讓長時間的任務:爬取一個網站,傳送一個驗證碼這樣的工作,不再阻塞主執行緒,web伺服器只負責發起任務和接受任務的結果,中間執行的部分交給其他執行緒、程序、伺服器去做。
2.安裝redis
Celery非同步任務
1、在settings當中配置django-celery
在settings.py 配置
# celery 配置 import djcelery djcelery.setup_loader() # 模組載入 BROKER_URL = 'redis://192.168.124.128:6379/1' # 任務容器地址,redis資料庫地址 CELERY_IMPORTS = ('CeleryTask.tasks') # 具體任務檔案 CELERY_TIMEZONE = 'Asia/Shanghai' # celery 時區 CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # celey處理器,固定
在專案的主目錄下,編寫celery的控制檔案,(控制檔案的名字最好是celery)
celery.py
import os from celery import Celery from django.conf import settings # 設定celery的環境變數和django-celery的工作目錄 os.environ.setdefault("DJANGO_SETTINGS_MODULE","CeleryTask.settings") # 例項化celery應用,傳入伺服器名稱app = Celery("art_project") # 載入celery配置 app.config_from_object("django.conf:settings") # 如果在專案中,建立了task.py,那麼celery就會沿著app去查詢task.py來生成任務 app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)
2.新建tasks.py在app01下
from __future__ import absolute_import from celery_pro.celery import app @app.task def add(x,y): return x+y
3.然後為了djcelery進行資料庫同步
python manage.py check
python manage.py makemigrations
python manage.py migrate
4.編寫檢視觸發非同步任務