要定时或者周期性的执行任务,可以使用linux的crontab。Celery也提供了类似的Periodic Tasks功能。

Celery beat

Celery使用celery beat作为任务调度器,周期性的启动任务。

需要执行的任务默认是在beat_schedule配置选项中设置的。使用django-celery-beat时,也可以使用数据库存储。

需要保证同一时间只有一个任务调度器在运行,否则会重复的执行任务。

Time Zones

既然是任务与时间有关,那么时区设置是很重要的。Celery默认使用UTC时区,要改变默认时区,可以配置:

timezone = Asia/Shanghai'

在django项目中使用celery时,celery也可以使用setting的TIME_ZONE时区设置。

使用默认的任务调度器时,celery会自动识别时区的改动,然后重置任务调度。使用其它任务调度时,需要手动重置。

比如,使用django-celery-beat时:

$ python manage.py shell

>>> from djcelery.models import PeriodicTask

>>> PeriodicTask.objects.update(last_run_at=None)

Entries

要添加周期任务,需要将事务添加到任务调度器中,添加方法有两种。

一种是使用add_periodic_task() 方法:

from __future__ import absolute_import, unicode_literals

from celery.schedules import crontab

from .celery import app

@app.on_after_configure.connect

def setup_periodic_tasks(sender, **kwargs):

# Calls add(1, 2) every 10 seconds.

sender.add_periodic_task(10.0, add.s(1, 2), name='add every 10')

# Calls add(3, 4) every 30 seconds

sender.add_periodic_task(30.0, add.s(3, 4), )

# Executes every Monday morning at 7:30 a.m.

sender.add_periodic_task(

┆ crontab(hour=7, minute=30, day_of_week=1),

┆ add.s(1, 2),

)

@app.task

def add(x, y):

print x + y

return x + y

另一种方法是配置beat_schedule选项:

app.conf.beat_schedule = {

'add-every-30-seconds': {

'task': 'tasks.add',

'schedule': 30.0,

'args': (3, 4)

},

}

可用字段:

task:需要执行的任务名称

schedule:任务执行时间设定,可以是整秒数,一个timedelta对象,或者一个crontab对象,也可以自己实现。

args:一个元组或者列表,位置参数

kwargs:一个字典,关键字参数

options:一个字典,一些额外选项,apply_async()方法可用的参数,exchange, routing_key, expires等

relative:默认false

Crontab

class celery.schedules.crontab(minute=u'*', hour=u'*', day_of_week=u'*', day_of_month=u'*', month_of_year=u'*', **kwargs)

一个表示时间间隔的对象,语法与linux的crontab类似。

minute和hour可以设置为*/15,*/2,分别表示每隔15分钟和每隔2小时。

day_of_week用可以0-6的数字表示,也可以文字表示mon-fri。*/2并不是每2天,而是每半天。

官网一些具体例子:

crontab()  每分钟

crontab(minute=0, hour=0)  每天的0时0分

crontab(minute=0, hour='*/3')  每三小时

crontab(day_of_week='sunday')  周日的每一小时

crontab(minute='*',hour='*', day_of_week='sun') 与上面相同

crontab(minute=0, hour='*/3,8-17') 每三个小时  8时到17时的每小时

Solar

可用日升日落表示的时间间隔:

from celery.schedules import solar

app.conf.beat_schedule = {

# Executes at sunset in Melbourne

'add-at-melbourne-sunset': {

'task': 'tasks.add',

'schedule': solar('sunset', -37.81753, 144.96715),

'args': (16, 16),

},

}

语法是solar(event, latitude, longitude)

event表示日落日出,latitude为纬度,北纬为+,longitude为经度,东经为+。

启动

启动celery beat周期任务命令:

$ celery -A proj beat

然后启动worker节点来处理任务即可。

beat与worker也可以同时启动,但最好只用于测试,适用于只启动一个worker节点的情况:

$ celery -A proj worker -B

beat会在当前目录下建立一个文件celerybeat-schedule来记录任务上次运行的时间,所以要保证celery对当前目录有写入的权限,或者指定文件位置:

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

python celery定时任务_Celery(四)定时任务相关推荐

  1. python定时任务_Python3实现定时任务的四种方式

    最近做一个小程序开发任务,主要负责后台部分开发:根据项目需求,需要实现三个定时任务: 1>定时更新微信token,需要2小时更新一次: 2>商品定时上线: 3>定时检测后台服务是否存 ...

  2. 【Local/docker-compose】安装Celery并启动beat定时任务-20220823

    settings.py(redis由container产生,不引用外部redis) """ Django settings for GAGA project.Genera ...

  3. celery源码分析-定时任务

    celery源码分析 本文环境python3.5.2,celery4.0.2,django1.10.x系列 celery的定时任务与Django配置 celery也可以执行定时任务来执行相关操作,ce ...

  4. python用schedule模块实现定时任务

    python用schedule模块实现定时任务 import schedule import timedef test():print("I'm working...") def ...

  5. java定时14点30分_单机定时任务的四种基本实现方式

    引言 在实际项目开发中,定时任务调度是经常会出现的一类需求. 定时任务的场景可以说非常广泛,例如: 购买某些视频网站的会员后,每天给会员送成长值,每月给会员送电影券 在保证最终一致性的场景中,利用定时 ...

  6. 用Python分析了1w四六级数据,教你如何通过四六级!

    微信改版,加星标不迷路! 用Python分析了1w四六级数据,教你如何通过四六级! 作者:阿广 概述 前言 数据介绍 预期结果 实现过程 搞笑一刻 阿广说 每日问题 前言 陈奕迅说过:在有生的瞬间,考 ...

  7. python学习之第四课时--运算符

    python学习之第四课时--运算符 运算符 1.算数运算 运算符 描述 实例 a=10,b=20 = 加,两个对象相加 a+b输出30 - 减,一个数减去另一个数 a-b输出-10 * 乘,两个数相 ...

  8. Python正则表达式使用的四个基本步骤

    http://blog.itpub.net/31403259/viewspace-2157701/ Python正则表达式使用的四个基本步骤     1.用import re导入正则表达式模块     ...

  9. python—Celery异步分布式

    python-Celery异步分布式 Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...

最新文章

  1. CSS grid 的用法
  2. 交换排序图解_图解简单选择排序
  3. vim将修改内容复制多次
  4. 2018【比特杯】编程大赛
  5. 机器学习基础-特征缩放交叉验证法-05
  6. 中国的四大沙地,你都认识吗?
  7. Java开发必会的反编译知识
  8. 【形式语言与自动机】图灵机
  9. 29 MM配置-采购-采购申请-采购申请审批策略-编辑特性
  10. Linux 发行版本简介 (zz)
  11. P1969 积木大赛
  12. [转载]关于wm系统同步时ActiveSync出现85010014错误号的解决办法
  13. 南京信息工程大学第二届程序设计大赛团队赛:L-三元对
  14. 我炒股十几年了,随着股龄的增长,对股市的操作也越来越得心应手。现在,股票年年都能赢利
  15. 看完涨薪2K+_____2019 JAVA 必刷面试题
  16. 【cocos creator 3.x】精灵图片不显示
  17. 计算机 90学时培训总结,90学时培训心得体会(通用5篇)
  18. 第1.4章:FE开发环境搭建(拓展篇)
  19. java kafka消息的发送与接收
  20. ERP项目实施的5个关键控制点

热门文章

  1. Google 警告开发者:所有 Android App 需要三天的审核时间!
  2. 甲骨文员工谈被裁原因;《绝地求生》停机维护;谷歌正研发折叠屏样机 | 极客头条...
  3. 诺基亚的「翻身」之战
  4. 当物联网和区块链同台,太惊艳!
  5. “离开 360 时,它只给了我一块钱”
  6. 云计算、人工智能、大数据等当前火热的技术,都离不开它!
  7. 滴滴司机毒打投资人;华为回应自研系统;微信回应被删聊天记录可提取 | 一周业界事...
  8. 上得写代码,下得作情诗,谁说程序员都是屌丝?
  9. 最前沿的容器技术有哪些?腾讯、华为、思科等 6 位顶尖专家为你解答!
  10. 今天带你详细了解各组件原理