Celery消息队列----配置定时任务
来源:互联网 发布:vba 窗体输入数据回调 编辑:程序博客网 时间:2024/05/29 10:43
介绍
celery 定时器是一个调度器(scheduler);它会定时地开启(kicks off)任务,然后由集群中可用的工人(worker)来执行。
定时任务记录(entries)默认 从 beat_schedule 设置中获取,但自定义存储也可以使用,如把记录存储到SQL数据库中。
要确保同一时间一份时间表上只有一个调度器在运行,否则会因为重复发送任务而结束。使用集中途径意味着定时任务不用必须同步,并且服务无需用锁操控。
记录
为了定时调用任务,你必须添加记录到打点列表中:
from celery import Celeryfrom celery.schedules import crontabapp = Celery()@app.on_after_configure.connectdef setup_periodic_tasks(sender, **kwargs): # 每10秒调用 test('hello') . sender.add_periodic_task(10.0, test.s('hello'), name='add every 10') # 每30秒调用 test('world') sender.add_periodic_task(30.0, test.s('world'), expires=10) # 每周一上午7:30执行 sender.add_periodic_task( crontab(hour=7, minute=30, day_of_week=1), test.s('Happy Mondays!'), )@app.taskdef test(arg): print(arg)
用on_after_configure处理器进行这些设置意味着当使用test.s()时我们不会在模块层面运行app 。
add_periodic_task() 函数在幕后会添加记录到beat_schedule设定,同样的设定可以用来手动设置定时任务:
例子: 每30秒运行 tasks.add .
app.conf.beat_schedule = { 'add-every-30-seconds': { 'task': 'tasks.add', 'schedule': 30.0, 'args': (16, 16) },}app.conf.timezone = 'UTC'
一般会使用配置文件进行配置,如下
celeryconfig.py:
broker_url = 'pyamqp://'result_backend = 'rpc://'task_serializer = 'json'result_serializer = 'json'accept_content = ['json']timezone = 'Europe/Oslo'enable_utc = Truebeat_schedule = { 'add-every-30-seconds': { 'task': 'tasks.add', 'schedule': 30.0, 'args': (16, 16) },}
程序里使用:
app.config_from_object('celeryconfig')
注意如果你的参数元组里只有一个项目,只用一个逗号就可以了,不要圆括号。
时间表使用时间差意味着每30秒间隔会发送任务(第一个任务在celery定时器开启后30秒发送,然后上每次距一次运行后30秒发送一次)
可使用的属性
task
要执行的任务名字
schedule
执行的频率
可以是整数秒数,时间差,或者一个周期( crontab)。你也可以自 定义你的时间表类型,通过扩展schedule接口。
args
位置参数 (list 或 tuple).
kwargs
键值参数 (dict).
options
执行选项 (dict).
这可以是任何被apply_async()支持的参数与—-exchange, routing_key, expires,等。
relative
如果 relative 是 true ,时间表“由时钟时间”安排,意味着 频率近似到最近的秒,分钟,小时或天,这取决于时间差中的时间间隔。
默认relative是false,频率不会近似,会相对于celery的启动时间。Crontab 表达式语法非常灵活。
开启调度
开启celery定时服务:
$ celery -A proj beat
你也可以把定时器嵌入到工人(worker)中,通过启用workers -B选项,如果你永远不会运行超过一个工人节点这就会很方便。但这不太常见,不推荐在生产环境这样使用:
$ celery -A proj worker -B
定时器需要在本地数据库文件(默认名为 celerybeat-schedule )存储任务上次运行时间,所以它需要在当前目录中写权限。或者你也可以给这个文件指定一个位置:
$ celery -A proj beat -s /home/celery/var/run/celerybeat-schedule
- Celery消息队列----配置定时任务
- CELERY 消息队列配置
- Celery消息队列----路由任务
- Celery定时任务
- django-celery定时任务
- Celery定时任务
- celery 异步任务队列
- Celery 分布式任务队列
- Celery任务队列
- celery分布式队列任务
- Celery 消息队列
- celery的定时任务记录
- django-celery动态添加定时任务
- Celery 学习笔记(2)- 定时任务
- Celery+python+redis异步执行定时任务
- 【Python】django-celery执行定时任务
- django+celery+redis实现运行定时任务
- Django之celery分布式异步任务队列
- DrawerLayout:安卓原生侧滑控件的使用
- [算法]3D三角面片与包围盒相交交点求法
- AIML标签
- (ubuntu系列)——备份和还原
- 面向对象的三个基本特征 和 五种设计原则
- Celery消息队列----配置定时任务
- 2017年Android SDK下载安装及配置教程
- Coursera机器学习 Week1 笔记
- Codeforces 839B Game of the Rows 贪心
- java 断言 assert 初步使用:断言开启、断言使用
- Java的Properties文件操作类
- 微信第三方平台开发经验总结(一):接收component_verify_ticket
- UGUI中的Canvas、Camera和Canvas Scaler
- ITTVIS.ENVI.Orthorectification.v5.0.SP2.Win32_64 2CD