Celery 3.1之后的版本原生支持django1.8及更高。
推荐用法
目录结构
- proj/
- proj/__init__.py
- proj/settings.py
- proj/urls.py
- manage.py
在项目下创建一个celery.py(和项目配置文件settings.py同级)
from __future__ import absolute_import, unicode_literals
# 使用绝对包含路径
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
# 设置django运行时需要的环境变量
app = Celery('proj') # 传入的应该是项目名称
app.config_from_object('django.conf:settings', namespace='CELERY')
# 读取django 的配置信息,使用 'CELERY_' 开头的即为celery的配置
app.autodiscover_tasks() # 自动发现在installed apps中包含的task(需要在tasks.py中定义)这样就不用手动的在CELERY_IMPORTS中添加设置
@app.task(bind=True) # dumps its own request information
def debug_task(self):
print('Request: {0!r}'.format(self.request))
在项目的init.py文件中增加:
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
在每个django app中即可加task,例如demoapp:
demoapp/tasks.py:
# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task
def add(x, y):
return x + y
启动工作进程
celery -A proj worker -l info
# 这边指定的proj即为django项目名称,需要像manage.py一样使用
增加结果保存
pip install django-celery-results
增加 django-celery-results 到installed apps中
python manage.py migrate django_celery_results
在django的配置文件中增加设置,说明使用django来进行结果保存:
CELERY_RESULT_BACKEND = 'django-db'