zoukankan      html  css  js  c++  java
  • Celery Task(定时任务)及参数

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

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

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

    • task
      要执行的任务的名称

    • schedule
      执行的频率。

      这可以是一个表示秒数的整数,一个 timedelta 或者一个 crontab。你还可以定义自己的调度器类型,只要扩展schedule接口。

    • args
      位置参数(list 或者 tuple)

    • kwargs
      关键字参数(dict)

    • options
      执行选项(dict)
      这可以是 apply_async() 支持的任何参数 exchange, routing_key,expires 等等。

    • relative
      如果 relative 设置成真(True), timedelta调度器依据时钟调度。这意味着频率将根据timedleta的周期四舍五入到最近的秒,分,小时或者天。

    默认情况下,relative值为假(False),频率没有四舍五入,而是相对于 celery beat 启动的时间。

    Crontab 表达式的语法非常灵活。

    一些示例:

    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 这一节获取更多的信息。

    请确保为经度和纬度使用正确的符号:

    SignArgumentMeaning
    + latitude North
    - latitude South
    + longtitude East
    - longtitude West

    可能的事件类型有:

    EventMeaning
    dawn_astronomical 天不完全黑的时候执行。 太阳在地平线下18度
    dawn_nautical 地平线有充足的阳光并且可以看清一些事物; 形式化一点, 太阳在地平线下12度
    dawn_civil 有充足的阳光可以看清事物并且可以开始户外活动; 形式化一点, 太阳在地平线下6度
    sunrise 太阳的上边缘出现在东方地平线上时执行
    solar_noon 一天中太阳距离地平线最高的位置时执行
    sunset 傍晚太阳的上边缘消失在西方地平线上时执行
    dusk_civil 黄昏的尽头, 事物仍然可见并且可以看到一些星星。形式化一点, 太阳在地平线下6度
    dusk_nautical 形式化一点, 太阳在地平线下12度。事物已经看不清,并且地平线也看不清了
    dusk_astronomical 天完全黑时执行; 形式化一点, 太阳在地平线下18度

    所有 solar 事件都使用 UTC 时间计算,因此不受你的 timezone 设置影响。

    在极地区域,太阳可能不会每天都升起。这个调度器可以处理这种情况(即:当太阳没有升起,sunrise 事件不会触发)。只有 solar_noon 事件除外,这个事件是由太阳经过地球两极纵分地球的圆环的时刻定义的,即使太阳在地平线下它也会天天触发。

    Twilight 定义为黎明到日出这段时间;以及日落到黄昏这段时间。依据你对 twilight 的定义(民用的、航海的或天文的),使用上述列表中的合适事件,你可以为你定义的twilight 触发一个事件,并且可以指定让事件在 twilight 开始还是结束的时刻触发。

    查看 celery.schedules.solar 获取更多的信息。

    启动 celery beat 服务:

    $ celery -A proj beat

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

    $ celery -A proj worker -B

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

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

    Django

    下载

    $ pip install django-celery-beat

     setting.py 中将 django_celery_beat 添加到 INSTALL_APPS 中 

    INSTALLED_APPS = (

        ...,
        'django_celery_beat',
    )
    迁移
    python manage.py migrate
     
     
    使用 django_celery_beat.schedulers:DatabaseScheduler 调度器:
     
    $ celery -A proj beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
  • 相关阅读:
    双系统安装,引导被覆盖-如何解决?
    关于apue.3e中apue.h的使用
    UML类图关系
    设计模式的原则
    插入排序Insertion Sort
    Xcode intellisense meaning of letters in colored boxes like f,T,C,M,P,C,K,# etc
    asp.net mvc 页面内容呈现Html.Raw HtmlString
    sqlserver通过设计器修改表结构保存时提示:保存到文本问题
    在windows下使用Cygwin模拟unix环境,并安装apt-cyg,svn等工具
    vs2015插件推荐 Productivity Power Tools 2015
  • 原文地址:https://www.cnblogs.com/wy919/p/15484005.html
Copyright © 2011-2022 走看看