1. 程式人生 > 其它 >Django非同步任務Celery

Django非同步任務Celery

將任務分配給其他的程序去執行,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.編寫檢視觸發非同步任務