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 表达式的语法非常灵活。

一些示例:

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

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

Sign Argument Meaning
+ latitude North
- latitude South
+ longtitude East
- longtitude West

可能的事件类型有:

Event Meaning
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

Celery Task(定时任务)及参数的更多相关文章

  1. Celery完成定时任务

    1.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 celery支持linux,如果windows使用celery ...

  2. Django 异步化库celery和定时任务

    首先要了解Django其实是个同步框架,那么多个用户发送请求时就会发生排队的情况上一个用户的请求完成后在进行下一个,这样会对影响用户体验,所有就要用到异步方法来解决. 首先我们要安装celery库 p ...

  3. Django中使用Celery实现定时任务(用djcelery)

    一.引言 Django是python语言下的一个比较热门的Web框架,越来越多的企业和开发者使用Django实现自己的Web服务器.在Web服务器开发过程中,有时候我们不仅仅是要实现Web服务器端和用 ...

  4. celery task - 2

    # celery task 前言 讨论一个定时任务,一般而言,需要的功能如下: 封装成对象,独立执行: 对象有一些接口,便于了解它的状态: 定时调用: 行为控制,包括重试,成功/失败回调等: 下面分别 ...

  5. 三、celery执行定时任务

    三.Celery执行定时任务 设定时间让celery执行一个 定时任务,product_task.py from celery_task import send_email from datetime ...

  6. Spring Boot 系列教程14-动态修改定时任务cron参数

    动态修改定时任务cron参数 不需要重启应用就可以动态的改变Cron表达式的值 不能使用@Scheduled(cron = "${jobs.cron}")实现 DynamicSch ...

  7. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...

  8. 分布式任务队列 Celery —— Task对象

    转载至 JmilkFan_范桂飓:http://blog.csdn.net/jmilk  目录 目录 前文列表 前言 Task 的实例化 任务的名字 任务的绑定 任务的重试 任务的请求上下文 任务的继 ...

  9. celery task异步任务

    业务端后台:通过python manage运行 运行用例时,用python manage运行时会卡,影响效率 celery task 本身自己也是个服务,异步处理case 异步:小明去给我买个东西,我 ...

  10. C# 以函数Action/Func/Task作为方法参数

    以Action.Func.Task作为方法参数,mark一下 以Action为参数 public void TestAction() { //Action参数 ExecuteFunction(() = ...

随机推荐

  1. Zookeeper Acl权限 超级用户权限 怎么跳过ACL密码/账户验证

    Zookeeper的一个节点不知道什么原因无法删除了,查看日志发现是没有权限, 我们之前使用ACL进行Zookeeper节点的权限管理. 可以解决以下三种但不限于以下三种问题: 1.在设置Acl权限时 ...

  2. Git - 命令行 常用

    一.合并其他分支的commit(A分支中的commit合并至B分支) 切换到A分支,查询commit历史命令行 : $ git log 复制要合并的commit id (如:663802dfb121e ...

  3. POJ3061——Subsequence(尺取法)

    Subsequence POJ - 3061 给定长度为n的数列整数a0,a1,a2-an-1以及整数S.求出总和不小于S的连续子序列的长度的最小值,如果解不存在输出0. 反复推进区间的开头和末尾,来 ...

  4. POJ1804——Brainman(水题)

    解题思路: 一个乱序序列的 逆序数 = 在只允许相邻两个元素交换的条件下,得到有序序列的交换次数 直接求逆序数 把S[i]和s[i+1~n]的元素逐个比较,如果s[i] > s[k] (k∈[i ...

  5. python类、对象

    python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...

  6. Linux系列(33)- rpm命令管理之RPM包校验提取(5)

    校验 格式 rpm -V 已安装的包名 选项: - -V:校验指定RPM包中的文件(verify) 例子 rpm -V httpd 后, 无任何提示, 代表该文件没有被做任何修改 # 判断本地的apa ...

  7. jmeter 元件详细介绍

    一.基本介绍 可以进行功能测试.性能测试.自动化测试. 二.配置元件介绍 线程组:threads 虚拟用户数,设置Jmeter按照什么场景运行,是一系列线程的集合,每一个线程都代表一个正在使用应用程序 ...

  8. Microfacet模型采样下的brdf

    本文前言 在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子), ...

  9. 解决nodejs的npm命令无反应的问题

    最近在弄cordova,又要折腾nodejs了. 今天安装cordova模块的时候,看到nodejs的默认模块安装路径在c盘 于是想修改下,按命令 npm config set prefix . 结果 ...

  10. C语言的return语句

    Q1:函数中的Return语句有什么用? Q2:Return 0有什么含义吗? A1:Return的作用为,跳出当前的函数,并且返回到调用当前函数的主调函数,当前函数中Return语句一下代码将不会运 ...