zl程序教程

您现在的位置是:首页 >  其他

当前栏目

61 Celery Beat 任务调度

2023-04-18 14:14:57 时间

        前面的任务调用都是手动触发的,本届将展示以下使用Celery的Beat进程自动调度任务。

        Celery Beat是Celery的调度器,其定期启动任务,然后由集群中的可用工作节点worker执行这些任务。默认情况下,Beat进程读取配置文件中CELERYBEAT_SCHE-DULE的设置,也可以使用自定义存储,比如将启动任务的规则存储在SQL数据库中。请确保每次只为任务调度运行一个调度程序,否则任务将被重复执行。使用集群的方式意味着调度不需要同步,服务可以在不使用锁的情况下执行。

        先明确一个概念---时区。间隔性任务调度默认使用UTC时区,也可以通过时区设置来改变时区。例如:

CELERY_TIMEZONE="Asia/Shanghai"  #通过配置文件设置

app.conf.timezone='Asia/Shanghai'  #直接在Celery  app的源代码中设置

        时区的设置必须加入Celery的App中,默认的调度器(将调度计划存储在celerybeat-schedule文件中)将自动检测时区是否改变,如果时区改变,则自动重置调度计划。其他调度器可能不会自动重置,比如Django数据库调度器就需要手动重置调度计划。

        【示例  1】Celery调度实例。

        修改myCeleryProj/settings.py

        接下来启用CeleryBeat进程处理调度任务。

celery  -A  myCeleryproj.app  beat

        最后可以在worker界面看到定时或间隔任务的处理情况。