前言

Celery在python中的应用除了实现异步任务(async task)外也可以执行定时任务(beat)


一、Celery定时任务是什么?

Celery默认任务单元由任务生产者触发,但有时可能需要其自动触发,而Beat进程正是负责此类任务,能够自动触发定时/周期性任务.
在这里插入图片描述
Celery 进行周期任务也很简单,只需要在配置中配置好周期任务,然后在运行一个周期任务触发器(beat)即可,具体网上看

二、使用步骤

win10 + python3 + redis + celery 5

1.代码结构

在这里插入图片描述

celery_config.py配置:
代码如下(示例):

#-*-coding=utf-8-*-
from datetime import timedelta
from celery.schedules import crontab

# 中间件
BROKER_URL = 'redis://scck2svr03:6379/6'

# 结果存储
# CELERY_RESULT_BACKEND = 'redis://:scck2svr03:6379/5'

CELERYD_CONCURRENCY = 20  # 并发worker数

CELERYD_FORCE_EXECV = True  # 非常重要,有些情况下可以防止死锁

# CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案

CELERY_RESULT_SERIALIZER = 'json'  # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24  # celery任务结果有效期

CELERY_ACCEPT_CONTENT = ['json', 'msgpack']  # 指定接受的内容类型

CELERY_TIMEZONE = 'Asia/Shanghai'  # celery使用的时区

CELERY_ENABLE_UTC = True  # 启动时区设置

# 默认worker队列
#CELERY_DEFAULT_QUEUE = 'default'

# 异步任务
CELERY_IMPORTS = (
    "celery_learning.email.tasks"
)

# celery beat
CELERYBEAT_SCHEDULE = {
    'periodic_task-every-minute': {
        'task': 'celery_learning.email.tasks.add',
        'schedule': crontab(minute="*/1"),
        'args': (1,2)
    },
    'periodic_task-every-10second':{
        'task':'celery_learning.email.tasks.add',
        'schedule':timedelta(seconds=10),
        'args':(1,12)
    }
}

2.启动定时任务

代码如下(示例):

终端1:celery -A celery_learning.celery_app worker -l info -P gevent
终端2:celery -A celery_learning.celery_app beat

终端1
在这里插入图片描述
终端2
在这里插入图片描述

3.执行结果

两个定时任务,一个每分钟执行,一个每10秒执行

结果如下:在这里插入图片描述


总结

记录点点滴滴

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐