Django中Celery簡介

初識Celery:

Celery 是一個 基於python開發的分佈式異步消息任務隊列,經過它能夠輕鬆的實現任務的異步處理,可將一些耗時的任務放入該消息隊列中處理,一些定時任務也能夠放入隊列中自動執行,如按期去統計日誌,數據備份,或者其餘的統計任務。python

Celery基本工做流程:
redis

Celery的安裝與配置

pip install celery
pip install celery-with-redis
pip install django-celery
apt install redis-server
三方庫的安裝

django中的配置:數據庫

ALLOWED_HOSTS = ['*']
INSTALLED_APPS = (
      ...
      'djcelery',
    }

import djcelery
djcelery.setup_loader()
BROKER_URL='redis://localhost:6379/1' #任務隊列存放的位置
CELERY_CONCURRENCY=2  #設置worker的併發數量
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2' #結果存放的位置
View Code

在settings的同級目錄下新建一個celery.py的文件django

from __future__ import absolute_import  #絕對路徑導入
from celery import Celery    
from django.conf import settings
import os

#設置系統的環境配置用的是Django的
os.environ.setdefault('DJANGO_SETTING_MODULE','day9_ex.settings')
#實例化celery
app = Celery('mycelery')
#設置時區
app.conf.CELERY_TIMEZONE = 'Asia/Shanghai'
#指定celery的配置來源 用的是項目的配置文件settings.py
app.config_from_object('django.conf:settings')
#讓celery 自動去發現咱們的任務(task)
app.autodiscover_tasks(lambda : settings.INSTALLED_APPS)    
View Code

在settings.py的同級目錄的__init__.py文件中導入瀏覽器

 #要寫在第一行
from __future__ import absolute_import  
 #導入工程目錄下celery中的app並起別名
from day9_ex.celery import app as celery_app 
View Code

Celery的使用

在須要使用異步任務的app目錄下新建tasks.py,將要執行的異步任務放在這裏面併發

from celery import task
import time

@task
def test(n):
    for i in range(n):
        print(i)
        time.sleep(3)
View Code

在views視圖函數中進行調用app

from django.http import HttpResponse
from django.shortcuts import render
from app.tasks import test


def test_celery(req):
    test.delay(6)
    return HttpResponse('ok')
View Code

開始執行以前要先進行數據庫表的遷移異步

而後啓動worker,命令爲python manage.py celery worker --loglevel=info (或者celery -A 工程名 worker -I info)      (PS:日誌級別能夠不寫)分佈式

而後在瀏覽器輸入url啓動項目ide

注意:修改tasks.py的內容後要重啓celery的服務!

 

定時任務的配置:
在上述配置的基礎上在settings.py中加入下面配置

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    'schedule-test': {
        'task': 'app.tasks.test2',   #指定要執行的函數
        'schedule': timedelta(seconds=6),   # 執行的計劃時間,每6秒執行一次,可自定義
        'args': ()  #參數
    },

}
View Code

還可以使用下面這種配置

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'schedule-test': {
        'task': 'app.tasks.test2',  #指定要執行的函數
        'schedule': crontab(minute=48,hour=11),   # 指定具體執行的計劃時間
        'args': ()   #參數
    },

}
View Code

crontab的參數設置如上圖,也能夠一個參數設置多個值,如day_of_week='1,2',表示每週一週二。

具體使用同異步處理。

先啓動python manage.py celery worker,再啓動python manage.py celery beat

注意:你的任務必定要確保是能夠正常執行的

相關文章
相關標籤/搜索