Bootstrap

celery——django-celery-beat的celery的配置选项、使用task与shared_task动态创建、取消延时任务以及定时任务

系列文章

django-celery-beat的celery的配置选项、使用task与shared_task动态创建、取消延时任务以及定时任务(celery4版本)


前言

本文中celery版本4.4.7,django-celery-beat版本2.2.0
celery版本5之后存在变化

一、celery的配置选项

首先在项目配置文件配置
settings.py

# 关闭celery的时区感知 
# 开启时celery会以UTC时区作为task的时间判断标准,而我们项目一般都是Asia/shanghai
DJANGO_CELERY_BEAT_TZ_AWARE = False

配置celery配置文件
celery_config.py 下方配置文件以redis作为消息队列

# Celery相关配置
# 设置时区
CELERY_TIMEZONE = "Asia/Shanghai"
# 设置代理人broker
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/11'
# 指定 Backend
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/12'
# celery 的启动工作数量设置
CELERY_WORKER_CONCURRENCY = 10
# 任务预取功能,会尽量多拿 n 个,以保证获取的通讯成本可以压缩。
CELERY_PREFETCH_MULTIPLIER = 20
# 有些情况下可以防止死锁
CELERY_FORCE_EXECV = True
# celery 的 worker 执行多少个任务后进行重启操作
CELERY_WORKER_MAX_TASKS_PER_CHILD = 100
# 禁用所有速度限制,如果网络资源有限,不建议开启。
CELERY_DISABLE_RATE_LIMITS = True

# celery内容等消息的格式设置
CELERY_ACCEPT_CONTENT = ['application/json', ]
# 指定任务序列化方式
CELERY_TASK_SERIALIZER = 'json'
# 指定结果序列化的方式
CELERY_RESULT_SERIALIZER = 'json'

创建celery设置上述配置信息
celery.py

import os
from celery import Celery

# 指定Django默认配置文件模块
# object_name此处为你的项目名(配置文件所在的目录)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'object_name.settings') 
# 创建celery的实例app,要在指定DJANGO_SETTINGS_MODULE环境变量之后

app = Celery('tasks')
# 命名空间 namespace='CELERY'定义所有与celery相关的配置的键名要以'CELERY_'为前缀 
# 前缀可以自己设置,对应的配置文件celery_config.py也要改变
app.config_from_object('object_name.celeryConfig', namespace='CELERY')

# 自动从所有已注册的django app中加载任务
app.autodiscover_tasks()


二、task、shared_task

1. task装饰器

1.1 task任务创建

使用这个装饰器实现的task是需要实例化才能作为celery任务的task来使用
创建一个文件来存放task
celery_task.py

from celery import app # 注意此处引入的是celery的配置选项出配置好的celery.py中创建的app
@app.task
def celery_demo(x, y):
    print("%d + %d = %d" % (x, y, x + y))
    return x + y

1.2 task任务生成

在需要生成celery任务的地方创建即可

from celery_task import celery_demo

def test():
	# 延时任务创建
	celery_demo.delay(args=[1, 2], kwargs={
   }, countdown=5, eta=datetime)
	# task_id 可以自己设置该唯一标识,不设置时celery会自己设置
	# task_id 用于后续查看任务状态、任务结果、删除任务,设置参数为字符串类型,注意设置时必须保证
;