zoukankan      html  css  js  c++  java
  • celery 基础教程(四):定时任务

    简介

    celery beat 是一个调度器;它以常规的时间间隔开启任务,任务将会在集群中的可用节点上运行。

    默认情况下,入口项是从 beat_schedule 设置中获取,但是自定义的存储也可以使用,例如在 SQL 数据库中存储入口项。

    你必须保证一个调度一次只被一个调度器运行,否则将会形成重复任务。使用中央集权的方式意味着调度不需要被同步,并且服务可以在没有锁的情况下操作。

    时区

    默认情况下,周期性任务使用 UTC 时区,但是你可以使用 timezone 设置修改时区。

    时区设置成 Europe/London 的示例:

    timezone='Europe/London'

    这个设置必须添加到你的应用实例,或者通过直接配置(app.conf.timezone = 'Europe/London'),或者如果你使用 app.config_from_object方法配置的话你可以将其添加到你的配置模块。查看配置这一节获取关于配置选项的跟多信息。

    默认的调度器会自动探测时区的更改(调度器存储在 celerybeat-schedule文件中),并且会重置调度器,但是其他的调度器可能没有这么智能(例如:Django 数据库调度器,下面有讲到),这种情况下你必须自己重置调度器。

    中国时间的设置

    CELERY_TIMEZONE = "Asia/Shanghai"
    CELERY_ENABLE_UTC = True

    Entries

    配置文件中设置

    config.py

    # coding:utf-8
    """celery 参数设置文件"""
    from celery.schedules import crontab
    CELERYD_CONCURRENCY = 4
    
    
    CELERY_TIMEZONE = "Asia/Shanghai"
    CELERY_ENABLE_UTC = True
    # 定时任务的设置
    CELERYBEAT_SCHEDULE = {
        'test1': { # test1 定时项目名
            'task': 'wangban.tasks.pour_tasks.tasks.send_tasks',#定时任务路径
            'schedule': crontab(minute=0, hour="*/8"),# 定时的周期
            'args': ()
        },

    'task2': { 'task': 'wangban.tasks.pour_tasks.tasks.start_seletask_1', 'schedule': crontab(minute=0, hour="*/8"), 'args': () }, 'task3': { 'task': 'wangban.tasks.pour_tasks.tasks.start_seletask_2', 'schedule': crontab(minute=0, hour="*/8"), 'args': () }, 'task4': { 'task': 'wangban.tasks.countinfo.tasks.send_anounce_info', 'schedule': crontab(minute=0, hour=7), 'args': () }, }

    Crontab schedules

    ExampleMeaning
    crontab() 每分钟执行
    crontab(minute=0, hour=0) 每天凌晨执行
    crontab(minute=0, hour=’*/3’) 每三个小时执行: midnight, 3am, 6am, 9am, noon, 3pm, 6pm, 9pm.
    crontab(minute=0,hour=’0,3,6,9,12,15,18,21’) 同上
    crontab(minute=’*/15’) 每十五分钟执行
    crontab(day_of_week=’sunday’) 星期天每分钟执行
    crontab(minute=’‘,hour=’‘, day_of_week=’sun’) 同上
    crontab(minute=’*/10’,hour=’3,17,22’, day_of_week=’thu,fri’) 每十分钟执行, 但是只在星期四、五的 3-4 am, 5-6 pm, and 10-11 pm
    crontab(minute=0, hour=’/2,/3’) 每两个小时及每三个小时执行,意思是: 除了下面时间的每个小时: 1am, 5am, 7am, 11am, 1pm, 5pm, 7pm, 11pm
    crontab(minute=0, hour=’*/5’) 每五个小时执行。这意味着将在 3pm 而不是 5pm 执行 (因为 3pm 等于 24 小时制的 15, 能被 5 整除)
    crontab(minute=0, hour=’*/3,8-17’) 每三个小时, 以及 (8am-5pm) 之间的小时执行
    crontab(0, 0, day_of_month=’2’) 每个月的第二天执行
    crontab(0, 0, day_of_month=’2-30/3’) 每个月的偶数天执行
    crontab(0, 0,day_of_month=’1-7,15-21’) 每个月的第一个和第三个星期执行
    crontab(0, 0, day_of_month=’11’,month_of_year=’5’) 每年五月份的第十一天执行
    crontab(0, 0,month_of_year=’*/3’) 每个季度的第一个月执行

    查看 celery.schedules.crontab 这一节获取更多的信息。

    Starting the Scheduler

    启动 celery beat 服务:

    $ celery -A proj beat

    你可以通过使能工作单元的 -B 选项将 beat 嵌入到你的工作单元中,如果你不会启动多于一个工作单元,那么这是很便利的,但是这并不常用,并且也不推荐在生产环境使用:

    $ celery -A proj worker -B

    Beat 需要在一个本地数据库文件(默认是 celerybeat-schedule文件 )中保存任务的最后执行时间,所以需要有当前目录的写权限,或者你也可以为这个文件制定一个自定义的路径:

    $ celery -A proj beat -s /home/celery/var/run/celerybeat-schedule

    注意:
    使用 beat 守护进程,请查看相关文档。

  • 相关阅读:
    kibana 设置登录认证
    elasticsearch
    elasticsearch安装ik
    elasticsearch 安装head
    Docker 数据卷之进阶篇
    link快捷方式
    动作方法中 参数,Json
    spring单元测试
    js之cookie操作
    idea快捷键
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12706358.html
Copyright © 2011-2022 走看看