django2.0.7 + celery4.2.1 + django-celery-results 实现后台任务

django2.0.7 + celery4.2.1 + django-celery-results 实现后台任务

在django2.0.7这个版本中,使用djcelery会导致报错。因为老的djcelery已经不再更新了。
celery4.0 兼容 django1.8+的版本 。 如果django版本低1.8,请使用celery3.1版本。

celery官放文档

安装
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界面中看到结果和状态

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值