一、安裝Django-celery 包:pip install django-celery==3.2.2python
二、開啓redis服務redis
須要使用redis作broker,因此在使用異步和定時任務時須要開啓redis服務器數據庫
三、配置信息django
在INSTALLED_APPS引入模塊json
配置具體信息服務器
# 自定義異步 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:文件名必須是這個,在這個模塊中寫方法)app
@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}
四、啓動異步任務spa
啓動broker:代理
celery worker -l info
啓動心跳:
python manage.py celery beat
注意:啓動broker和啓動心跳必須是在兩個不一樣的終端,每次添加異步任務時都必須從新開啓心跳和開啓broker。且先把根目錄下的celerybeat.pid刪除