django2.0+django-celery使用笔记

版本:

  • Django 2.0.1
  • django-celery 3.3.0
  • redis 2.10.0

celeryconfig.py

与settings.py同级

from datetime import timedelta

import djcelery
djcelery.setup_loader()

BROKER_BACKEND = 'redis'
BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'

CELERY_QUEUES = {
    'beat_tasks':{
        'exchange':"beat_tasks",
        'exchange_type':"direct",
        'binding_key':"beat_tasks"
    },
    'work_tasks':{
        'exchange':"work_tasks",
        'exchange_type':"direct",
        'binding_key':"work_tasks"
    }
}

<!--默认使用的队列-->
CELERY_DEFAULT_QUEUE = 'work_tasks'

<!--任务列表-->
CELERY_IMPORTS  = (
    'course.tasks'
)


# 有些情况可以防止死锁
CELERYD_FORCE_EXECV = True

# 设置并发worker数量
CELERYD_CONCURRENCY = 4

# 允许重试
CELERY_ACKS_LATE = True


# 每隔work最多执行100个任务被销毁
CELERYD_MAX_TASKS_PER_CHILD = 100


CELERY_TASK_TIME_LIMIT = 12 * 30



CELERYBEAT_SCHEDULE = {
    'task1':{
        'task':"course-task",
        'schedule':timedelta(seconds=5),
        'options':{
            'queue':"beat_tasks"
        }
    }
}

settings.py

并在settings.py中导入
from .celeryconfig import *
添加djcelery和创建的app

创建app下tasks.py文件

import time
from celery.task import Task


class CourseTask(Task):
    <!--定时任务可以直接使用名称调用-->
    name = 'course-task'
    def run(self,*args,**kwargs):
        print('start task')
        time.sleep(4)
        print("args={},kwargs{}".format(args,kwargs))
        print('end task')

views.py调用任务

from django.http import JsonResponse
from django.shortcuts import render

# Create your views here.
from course.tasks import CourseTask


def do(request):
    print('start request')
    CourseTask.delay()
    return JsonResponse({
        'reuqest':"ok"
    })

启动

python manage.py celery worker -l info

安装flower

pip install flower

python manage.py celery flower

http://127.0.0.1:5555

可能遇到的错误:

Unrecoverable error: AttributeError("‘str’ object has no attribute ‘items’",)
解决方法:使用2.10版本即 pip install redis==2.10即可

不能root用户启动
临时解决export C_FORCE_ROOT=‘true’

File “/root/.pyenv3/lib/python3.6/site-packages/djcelery/management/commands/celery.py”, line 23, in Command
preload_options)
将celery.py中的options注释掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值