django2.0.7 + celery4.2.1 + django-celery-results 实现后台任务
在django2.0.7这个版本中,使用djcelery会导致报错。因为老的djcelery已经不再更新了。
celery4.0 兼容 django1.8+的版本 。 如果django版本低1.8,请使用celery3.1版本。
安装
pip install celery django-celery-results
配置
假定项目目录结构如下,且我们已在第一层platform目录中。
platform -|
| apps -|
|app1
| platform -|
|settings.py
|uwsgi.py
|__init__.py
编辑 platform/celery.py (与settings.py同层)
from __future__ import absolute_import, unicode_literals #这句导入一定要在第一的位置
import os
from celery import Celery
from django.conf import settings
#这里我们的项目名称为,所以为platform.settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "platform.settings")
# 创建celery应用
app = Celery('dailyblog')
doesn’t have to serialize the object.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
编辑 platform/__init__.py
from __future__ import absolute_import, unicode_literals
from opsplatform.celery import app as celery_app
__all__ = ('celery_app',)
编辑platform/settings.py
...
CELERY_BROKER_URL= 'amqp://guest@localhost//' #使用rabbitmq做为消息队列
CELERY_RESULT_BACKEND = 'django-db' #使用database作为结果存储
...
INSTALLED_APPS = [
...
'django_celery_results',
...
]
创建数据信息
./manage.py migrate django_celery_results
添加后台函数。 这里注意,后台函数中的参数不能直接传model对象进来,这样会导致序列化失败
vim apps/app1/tasks.py
from platform import celery_app as app
@app.task
def func():
#你的代码
引用方法
func.delay()
启动celery
celery -A platform worker -l debug
# celery -A 项目名字,这里为platform work -l 日志级别
执行的任务可以在admin界面中看到结果和状态