1. 程式人生 > >Django設置異步任務

Django設置異步任務

code acc ins ken 隊列 delay ont raise schedule

1、安裝Django-celery 包:pip install django-celery==3.2.2

2、開啟redis服務

  需要使用redis做broker,所以在使用異步和定時任務時需要開啟redis服務器

3、配置信息

  技術分享圖片

  在INSTALLED_APPS引入模塊

  技術分享圖片

配置具體信息

# 自定義異步
import djcelery
djcelery.setup_loader()
# BROKER_URL = ‘django://‘ # 使用django做broker,消息代理、隊列
BROKER_URL = ‘redis://10.255.0.250:6379/4‘  # 使用redid做broker,消息代理、隊列
CELERYBEAT_SCHEDULER = ‘djcelery.schedulers.DatabaseScheduler‘  # 這是使用了django-celery默認的數據庫調度模型,任務執行周期都被存在你指定的orm數據庫中
# BROKER_POOL_LIMIT = 0
CELERY_RESULT_BACKEND = ‘djcelery.backends.database:DatabaseBackend‘  # 需要跟蹤任務的狀態時保存結果和狀態,結果存儲
# CELERY_RESULT_BACKEND = ‘redis://127.0.0.1:6379/2‘
CELERY_TIMEZONE = ‘Asia/Shanghai‘  # 默認上海時區
CELERY_ACCEPT_CONTENT = [‘pickle‘, ‘json‘, ‘msgpack‘, ‘yaml‘]
CELERY_TASK_SERIALIZER = ‘json‘
CELERY_RESULT_SERIALIZER = ‘json‘
# 調度任務
from datetime import timedelta
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # 定時任務
    ‘daybreake‘: {
        ‘task‘: ‘emall_app.tasks.add‘,
        ‘schedule‘: crontab(minute=u‘1‘, hour=u‘0‘),
        ‘args‘: (2, 3)
    },
    # 定期任務
    ‘add-every-3-secondes‘: {
        ‘task‘: ‘emall_app.tasks.add‘,
        ‘schedule‘: timedelta(seconds=10),
        ‘args‘: (5, 5)
    },

}

具體的異步任務的方法(如果想在別的模塊用到異步,就必須在各個模塊的目錄中創建task.py文件ps:文件名必須是這個,在這個模塊中寫方法)

@task
def add(x, y):
    return x + y

在別的view文件調用

from emall_app.tasks import add
from prod_core import constants
from prod_core.decorators import json_response

@json_response
def task_demo(request):
    result = add.delay(2, 2)
    log.exception(
=========== result) log.exception(result) if result.ready(): print "Task has run" if result.successful(): print "Result was: %s" % result.result else: if isinstance(result.result, Exception): print "Task failed due to raising an exception
" raise result.result else: print "Task failed without raising exception" else: print "Task has not yet run" return {code: constants.RESULT_SUCCESS}

4、啟動異步任務

啟動broker

celery worker -l info

技術分享圖片

啟動心跳:

python manage.py celery beat

技術分享圖片

註意:啟動broker和啟動心跳必須是在兩個不同的終端,每次添加異步任務時都必須重新開啟心跳和開啟broker。且先把根目錄下的celerybeat.pid刪除

Django設置異步任務