python celery定时任务_Celery(四)定时任务
要定时或者周期性的执行任务,可以使用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(四)定时任务相关推荐
- python定时任务_Python3实现定时任务的四种方式
最近做一个小程序开发任务,主要负责后台部分开发:根据项目需求,需要实现三个定时任务: 1>定时更新微信token,需要2小时更新一次: 2>商品定时上线: 3>定时检测后台服务是否存 ...
- 【Local/docker-compose】安装Celery并启动beat定时任务-20220823
settings.py(redis由container产生,不引用外部redis) """ Django settings for GAGA project.Genera ...
- celery源码分析-定时任务
celery源码分析 本文环境python3.5.2,celery4.0.2,django1.10.x系列 celery的定时任务与Django配置 celery也可以执行定时任务来执行相关操作,ce ...
- python用schedule模块实现定时任务
python用schedule模块实现定时任务 import schedule import timedef test():print("I'm working...") def ...
- java定时14点30分_单机定时任务的四种基本实现方式
引言 在实际项目开发中,定时任务调度是经常会出现的一类需求. 定时任务的场景可以说非常广泛,例如: 购买某些视频网站的会员后,每天给会员送成长值,每月给会员送电影券 在保证最终一致性的场景中,利用定时 ...
- 用Python分析了1w四六级数据,教你如何通过四六级!
微信改版,加星标不迷路! 用Python分析了1w四六级数据,教你如何通过四六级! 作者:阿广 概述 前言 数据介绍 预期结果 实现过程 搞笑一刻 阿广说 每日问题 前言 陈奕迅说过:在有生的瞬间,考 ...
- python学习之第四课时--运算符
python学习之第四课时--运算符 运算符 1.算数运算 运算符 描述 实例 a=10,b=20 = 加,两个对象相加 a+b输出30 - 减,一个数减去另一个数 a-b输出-10 * 乘,两个数相 ...
- Python正则表达式使用的四个基本步骤
http://blog.itpub.net/31403259/viewspace-2157701/ Python正则表达式使用的四个基本步骤 1.用import re导入正则表达式模块 ...
- python—Celery异步分布式
python-Celery异步分布式 Celery 是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...
最新文章
- CSS grid 的用法
- 交换排序图解_图解简单选择排序
- vim将修改内容复制多次
- 2018【比特杯】编程大赛
- 机器学习基础-特征缩放交叉验证法-05
- 中国的四大沙地,你都认识吗?
- Java开发必会的反编译知识
- 【形式语言与自动机】图灵机
- 29 MM配置-采购-采购申请-采购申请审批策略-编辑特性
- Linux 发行版本简介 (zz)
- P1969 积木大赛
- [转载]关于wm系统同步时ActiveSync出现85010014错误号的解决办法
- 南京信息工程大学第二届程序设计大赛团队赛:L-三元对
- 我炒股十几年了,随着股龄的增长,对股市的操作也越来越得心应手。现在,股票年年都能赢利
- 看完涨薪2K+_____2019 JAVA 必刷面试题
- 【cocos creator 3.x】精灵图片不显示
- 计算机 90学时培训总结,90学时培训心得体会(通用5篇)
- 第1.4章:FE开发环境搭建(拓展篇)
- java kafka消息的发送与接收
- ERP项目实施的5个关键控制点
热门文章
- Google 警告开发者:所有 Android App 需要三天的审核时间!
- 甲骨文员工谈被裁原因;《绝地求生》停机维护;谷歌正研发折叠屏样机 | 极客头条...
- 诺基亚的「翻身」之战
- 当物联网和区块链同台,太惊艳!
- “离开 360 时,它只给了我一块钱”
- 云计算、人工智能、大数据等当前火热的技术,都离不开它!
- 滴滴司机毒打投资人;华为回应自研系统;微信回应被删聊天记录可提取 | 一周业界事...
- 上得写代码,下得作情诗,谁说程序员都是屌丝?
- 最前沿的容器技术有哪些?腾讯、华为、思科等 6 位顶尖专家为你解答!
- 今天带你详细了解各组件原理