目录
  • 前言
  • 一、Celery定时任务是什么?
  • 二、使用步骤
    • 1.代码结构
    • 2.启动定时任务
    • 3.执行结果
  • 总结

    前言

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

    一、Celery定时任务是什么?

    Celery默认任务单元由任务生产者触发,但有时可能需要其自动触发,而Beat进程正是负责此类任务,能够自动触发定时/周期性任务.

    Python Celery定时任务详细讲解

    Celery 进行周期任务也很简单,只需要在配置中配置好周期任务,然后在运行一个周期任务触发器(beat)即可,具体网上看

    二、使用步骤

    win10 + python3 + redis + celery 5

    1.代码结构

    Python Celery定时任务详细讲解

    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

    Python Celery定时任务详细讲解

    终端2

    Python Celery定时任务详细讲解

    3.执行结果

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

    结果如下:

    Python Celery定时任务详细讲解

    总结

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。