Celery周期性任务定义beat
通过celery beat可以使用周期性任务的定义。
https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html
周期性任务beat相关设置:
https://docs.celeryq.dev/en/stable/userguide/configuration.html#std-setting-beat_schedule
您必须确保一次只运行一个beat调度程序,否则您最终会遇到重复的任务。
定义周期性任务
要定期调用任务,您必须向beat调度列表中添加一个实例条目。
from celery import Celery
from celery.schedules import crontab
app = Celery()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls test('hello') every 10 seconds.
sender.add_periodic_task(10.0, test.s('hello'), name='add every 10')
# Calls test('hello') every 30 seconds.
# It uses the same signature of previous task, an explicit name is
# defined to avoid this task replacing the previous one defined.
sender.add_periodic_task(30.0, test.s('hello'), name='add every 30')
# Calls test('world') every 30 seconds
sender.add_periodic_task(30.0, test.s('world'), expires=10)
# Executes every Monday morning at 7:30 a.m.
sender.add_periodic_task(
crontab(hour=7, minute=30, day_of_week=1),
test.s('Happy Mondays!'),
)
@app.task
def test(arg):
print(arg)
@app.task
def add(x, y):
z = x + y
print(z)
请注意, on_after_configure 是在应用程序设置后发送的,因此声明应用程序的模块外部的任务(例如,位于 celery.Celery.autodiscover_tasks() 的tasks.py 文件中)必须使用 on_after_finalize 。
add_periodic_task() 函数会在后台将实例条目添加到 beat_schedule 设置中,
同样我们还可以用设置选项的方式手动设置周期性任务:
示例:每 30 秒运行一次tasks.add 任务。
app.conf.beat_schedule = {
'add-every-30-seconds': { # 任务名
'task': 'tasks.add', # 任务执行的函数名
'schedule': 30.0, # 调度策略,可以是整数秒数、timedelta 或 crontab 。您还可以通过扩展 schedule 的接口来定义自己的自定义计划类型。
'args': (16, 16) # 传递给任务函数的参数
},
"add-every-hour": {
"task": "tasks.add",
'schedule': timedelta(hours=1), # 每小时执行1次
'args': (3, 8) # 传递参数-
},
}
beat_schedule 的参数:https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html#available-fields
周期性任务调度器
Crontab schedules
https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html#crontab-schedules
这种调度策略就是linux中的crontab。比较灵活。
from celery.schedules import crontab
app.conf.beat_schedule = {
# Executes every Monday morning at 7:30 a.m.
'add-every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (16, 16),
},
}
Solar schedules根据太阳日落日出调度
如果你有一个任务需要根据日出、日落、黎明或黄昏执行,你可以使用 solar 调度类型:
https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html#solar-schedules
这个一般不怎么用.....
启动beat调度程序服务器
celery.exe -A celery_tasks.main beat -l INFO
您还可以通过启用workers -B 选项将beat嵌入到worker中,如果您永远不会运行多个worker节点,这会很方便,但它并不常用,因此不建议用于生产用途:【这玩意windows不支持!!!】
celery -A proj worker -B
Beat 需要将任务的最后运行时间存储在本地数据库文件(默认名称为 celerybeat-schedule,格式是.db)中,因此需要在当前目录中进行写入,或者您可以为此文件指定自定义位置:
celery -A proj beat -s /home/celery/var/run/celerybeat-schedule
Celery周期性任务定义beat的更多相关文章
- Celery beat实现定时/轮询任务
Celery定时任务 配置 启用Celery的定时任务需要设置CELERYBEAT_SCHEDULE . Celery的定时任务都由celery beat来进行调度.celery beat默认按照s ...
- django 异步任务实现及Celery beat实现定时/轮询任务
Celery定时任务 requirements celery==3.1.25 异步任务 django-celery==3.2.2 定时任务管理包 redis==2.10.6 django-redis- ...
- celery beat - 心跳包
celery -A 项目名 beat -l info -S django# 启动心跳任务 celery -A 项目名 worker -l info # 启动1个worker去执行
- Celery异步调度框架(一)基本使用
介绍 之前部门开发一个项目我们需要实现一个定时任务用于收集每天DUBBO接口.域名以及TOMCAT(核心应用)的访问量,这个后面的逻辑就是使用定时任务去ES接口抓取数据存储在数据库中然后前台进行展示. ...
- Python 并行分布式框架 Celery
Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...
- Celery 收下这捆芹菜!
目录 Celery简介 Celery构成 Task Broker Worker Backend Celery使用 安装 基本使用 异步任务: delay 延迟任务: apply_async 周期任务: ...
- Celery实现周期任务
这个翻译之后居然叫芹菜~~最近Django框架需要涉及到执行周期任务~~上网搜了下其实还挺多的(django_crontab:这个学习周期短,但是发现不仅麻烦还不好用啊).(apscheduler,简 ...
- 【转】Python 并行分布式框架 Celery
原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.o ...
- celery异步任务队列入门
参考: Celery入门 任务调度delay&apply_async celery 简要概述 Celery 中文手册 Celery动态添加定时任务 全网最细之Celery 4.x动态添加定时任 ...
- celery简单应用
写作背景介绍 在celery简单入门中已经介绍了写作的背景,这篇文章主要是深入介绍celery的使用技巧.在实际的项目中我们需要明确前后台的分界线,因此我们的celery编写的时候就应该是分成前后台两 ...
随机推荐
- SQL多表查询指南
SQL多表查询指南 在实际的数据库应用中,通常需要查询涉及多个表的数据.SQL提供了多种方法来执行这种多表查询操作. 内连接(INNER JOIN) 内连接是将多个表中满足连接条件的行组合在一起的操作 ...
- 15种实时uv实现方案系列(附源码)之一:Flink基于set实时uv统计
UVStatMultiPlans(GitHub)项目持续收集各种高性能实时uv实现方案并对各种实现方案的优缺点进行对比分析! 需求描述 统计每分钟用户每个页面的uv访问量. Kafka数据格式 {&q ...
- vue3探索——pinia高阶使用
以下是一些 Pinia 的其他高阶功能: storeToRefs():响应式解构仓库,保证解构出来的数据是响应式的数据. 状态持久化:Pinia 并没有内置的状态持久化功能,但你可以使用第三方库或自定 ...
- LUA的一些工具备份
table.unpack遇到的问题 做了个中转的服务, socket+json 传递数据, 通过 {...} 封装不定参数然后 json.encode 传递到其他服务器, 然后其他服务器 json.d ...
- VMware Work Station使用ubuntu20.04挂载共享文件夹写入文件时出现输入/输出错误
原因是默认的max_write为0x00020000即128k,超过此大小会报错,另外big_writes,umask等选项也要加上, sudo /usr/bin/vmhgfs-fuse .host: ...
- Codechef - Longest AND Subarray(位运算)
题目大意 给定一个正整数N,其序列为[1, 2, 3, ..., N],找到一个长度最大的连续子列,使得其所有元素取与运算的结果为正(最终输出只需要输出最大长度即可). 思路 刚开始可能并不好 ...
- 一个简单的C4.5算法,采用Python语言
Test1.py 主要是用来运行的 代码如下: # -*- coding: utf-8 -*- from math import log import operator import treePlot ...
- Oracle11g安装教程(带安装包)
找了半天没在官网上找到Oracle11g的安装包下载,又找了半天,终于在网上的一个教程里找到安装包的网盘链接.现在在这记一下防止以后重新找麻烦. 网盘链接 百度云盘链接:[https://pan.ba ...
- HBuilderX内置终端无法使用不能输入
找到HBuilderX的目录打开plugins\builtincef3terminal\script找到main.js用记事本或其他什么打开他 把这部分代码替换成这个再重启hbuilderX就可以了 ...
- 维修道路(repair)
维修道路(repair) 时间限制: 1 Sec 内存限制: 128 MB 题目描述 由于在十多年前道路改建时的突出贡献, Bob 被任命为维修道路的承包商, 他可以任意 选择两条路径去修理. Bo ...