前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django Celery定时任务和时间设置

Django Celery定时任务和时间设置

作者头像
KEVINGUO_CN
发布于 2020-03-16 15:33:55
发布于 2020-03-16 15:33:55
5.1K00
代码可运行
举报
文章被收录于专栏:全栈全栈全栈全栈
运行总次数:0
代码可运行
1、Celery加入定时任务

Celery除了可以异步执行任务之外,还可以定时执行任务。在实例代码的基础上写个测试方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf-8from celery.task.schedules import crontab  from celery.decorators import periodic_task @periodic_task(run_every=crontab())def some_task():    print('periodic task test!!!!!')    time.sleep(5)    print('success')    return True

该代码是每分钟执行一次some_task方法。

上篇文章启动celery是使用worker。但worker不能启动定时任务。启动方式如下:

1)先确保中间人是否打开,我使用redis作为中间人。可参考Redis在CentOS和Windows安装过程

2)进入django项目的根目录执行如下代码启动celery的worker:

有两个任务,其中一个myapp.tasks.sendmail是上篇文章添加的异步处理任务。myapp.tasks.some_task是本次的定时任务。

3)同样在django项目的根目录下再打开一个命令行界面,执行如下代码:

2、Celery定时任务时间设置

若你觉得1分钟等待时间太长。可以设置为每10秒执行一次定时任务。将上面的periodic_task修改如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@periodic_task(run_every=10)

修改代码,需要重启Celery的worker和beat。

这个run_every参数是设置定时任务的时间间隔或执行的时间。该参数设置有3种方式。

1)直接设置秒数

例如刚刚所说的10秒间隔,run_every=10,每10秒执行一次任务。1分钟即是60秒;1小时即是3600秒。

2)通过datetime设置时间间隔

有时直接设置秒数不方便,需要通过计算得到具体秒数。

例如,1小时15分钟40秒 = 1*60*60 + 15*60 + 40。这种情况可读性也不高。

可以采用datetime设置,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from celery.decorators import periodic_taskimport datetime @periodic_task(run_every=datetime.timedelta(hours=1, minutes=15, seconds=40))def some_task():    print('periodic task test!!!!!')

代码可读性明显提升,而且设置方便。

但这种不能满足定时定点的时间设置。假如我想固定每天12点15分的时候,执行一次任务。datetime和直接设置秒数的方式都无法实现。这时得使用第3种方式。

3)celery的crontab表达式

crontab是比较完善,且稍微有点复杂(相对前面两种方式而言)的方式。可以实现我们各种设置时间的需求。

例如,前面给出的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf-8from celery.task.schedules import crontab  from celery.decorators import periodic_task @periodic_task(run_every=crontab())def some_task():    print('periodic task test!!!!!')

表示每分钟0秒时刻执行一次(后面不提这个0秒,大家都知道就行了,省点口水)。

其中,crontab()实例化的时候没设置任何参数,都是使用默认值。crontab一共有7个参数,常用有5个参数分别为:

minute:分钟,范围0-59;

hour:小时,范围0-23;

day_of_week:星期几,范围0-6。以星期天为开始,即0为星期天。这个星期几还可以使用英文缩写表示,例如“sun”表示星期天;

day_of_month:每月第几号,范围1-31;

month_of_year:月份,范围1-12。

a、默认参数

这些参数可以设置表达式,表达稍微复杂的设置。默认值都是"*"星号,代表任意时刻。即crontab()相当与:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(minute='*', hour='*', day_of_week='*', day_of_month='*', month_of_year='*')

含义是每天、每小时、每分钟执行一次任务。这说法太反人类语言习惯,简单说就是每1分钟执行一次任务。

b、具体某个值

上面提到这些参数的取值范围。我们可以直接设置某个值。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(minute=15)

即每小时的15分时刻执行一次任务。直接指定某个时刻。以此类推可以设置每天0点0分时刻执行任务的设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(minute=0, hour=0)

当然,也可以设置多个值。例如0分和30分执行一次任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(minute='0,30')

这里使用字符串,用逗号隔开数值。这里的逗号是表示多个表达式or逻辑关系。

c、设置范围

设置范围也是设置多个值,例如指定9点到12点每个小时的每分钟执行任务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(minute='*', hour='9-12')

这里*号是默认值,可以省略如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(hour='9-12')

上面提到逗号是or逻辑关系。拓展一下,指定9点到12点和20点中每分钟执行任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(hour='9-12,20')

crontab的表达式越来越复杂了。celery还提供了一个类得到表达式解析结果,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from celery.task.schedules import crontab_parserr = crontab_parser(23, 0).parse('9-12,20')print(r)

其中,crontab_parse是一个解析类。第1个参数是范围的最大值;第2个参数是范围的最小值。通过parse输入表达式,可得到表达式的解析结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set([9, 10, 11, 12, 20])

下面很多地方我们都可以通过该方法验证解析结果。

d、设置间隔步长

假如我要设置1、3、5、7、9、11月份每天每分钟执行任务,按照上面的做法可以设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(day_of_month='1,3,5,7,9,11')

观察数据可以发现,都是间隔2的步长。需要设置的数字比较少,若数字比较多显得很麻烦。例如我想每间隔2分钟就执行一次任务,要写30个数字想想就觉得很麻烦。crontab表达式还提供了间隔的处理,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab(minute='*/2')crontab(minute='0-59/2') #效果等同上面

这个/号不是除以的意思。相当与range的第3个参数,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
range(0, 59+1, 2)

差不多crontab表达式就这些,多举几个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#每2个小时中每分钟执行1次任务crontab(hour='*/2') #每3个小时的0分时刻执行1次任务#即[0,3,6,9,12,15,18,21]点0分crontab(minute=0, hour='*/3') #每3个小时或8点到12点的0分时刻执行1次任务#即[0,3,6,9,12,15,18,21]+[8,9,10,11,12]点0分crontab(minute=0, hour='*/3,8-12') #每个季度的第1个月中,每天每分钟执行1次任务#月份范围是1-12,每3个月为[1,4,7,10]crontab(month_of_year='*/3') #每月偶数天数的0点0分时刻执行1次任务crontab(minute=0, hour=0, day_of_month='2-31/2') #每年5月11号的0点0分时刻执行1次任务crontab(0, 0, day_of_month='11', month_of_year='5')

这些表达式设置都可以用crontab_parser验证。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
CODING DevOps 系列第三课:云计算、云原生模式下 DevOps 的建设
本文首先会和大家分享当前整个应用生命周期的演变历程,然后讲解云计算模式下 DevOps 建设包含的过程、流程规范和标准,最后讲解云原生时代到来会带来哪些改变,以及标准化的建设会有哪些改变和突破。
腾讯云 CODING
2020/06/16
8910
云计算、云原生模式下 DevOps 的建设
企业数字化转型过程和云的迭代发展是相互作用的。在2007年之前主要用物理机来作为我们当前应用的载体。而在2007年,KVM诞生,它能让底层操作系统和一些虚拟的网络设备做一些虚拟化的输出。2007年-2010年是虚拟化发展较好的周期,VMware和openstack是当时的代表生态。到了2013年Docker开服,云计算迎来了蓬勃发展的周期。2014年,企业的部分业务开始逐步迁移云上。2017年后到今天为止,在云原生的模式下,开发人员或者整个it部门更聚焦在业务的发展上,所有我们不关心的部分可以全部由云来管理。云开发不必关系开发在哪里,云服务不关心调用到哪里,而云资源方面也不用关心运行到了哪里。这就是从基础设施上云到业务上云,再到当前的全栈云,这样的一条全企业数字化转型之路。
云大学小编
2020/06/17
1.5K0
云计算、云原生模式下 DevOps 的建设
云原生应用交付平台Orbit设计理念与价值主张
Orbit 是腾讯云 CODING 推出的一个企业级云原生应用交付平台(图3-1)。Orbit 以应用为中心进行设计,主要包括应用建模、应用交付、应用运维和声明式基础设施设施交付 4 个方面进行平台设计,围绕着基于 OAM 应用建模、Application As Code、GitOps 版本化管理、统一可观测性 4 个维度进行具体价值主张声明。
腾讯云 CODING
2023/06/21
3K0
云原生应用交付平台Orbit设计理念与价值主张
​「DevOps 转型与实践」沙龙回顾第二讲
本期分享内容为 《平台化 DevOps—云计算与云原生模式下 DevOps 的建设实践》。目前,DevOps 越来越成为大家当前建设的热点,伴随着基础设施的转型和应用框架的转型,更多的业务偏向云端和 C 端的场景,促进了 DevOps 的发展。在本次沙龙上,腾讯云 CODING DevOps 资深架构师余朋飞为大家介绍了在云计算和云原生两种模式下,如何推进 DevOps 的建设和实践。
腾讯云 CODING
2020/10/09
4040
十六年所思所感,聊聊这些年我所经历的 DevOps 系统
前不久,我因为运动时的姿势不对,导致右腿骨折,喜提三个月的居家修养。按照作家刘震云的说法,这叫做着正确的事情,却迈着不正确的步伐。于是乎,我的活动空间骤减,每日除了短暂地楼下放风,便是卧坐于方寸之间。周遭静下来,许多回忆便涌了上来。
用户1107783
2024/09/06
1510
十六年所思所感,聊聊这些年我所经历的 DevOps 系统
金融云原生漫谈(一)|银行业如何快速提升应用研发效能和交付效率?
在金融行业数字化转型的驱动下,国有银行、股份制银行和各级商业银行也纷纷步入容器化的进程。如果以容器云上生产为目标,那么整个容器云平台的设计、建设和优化对于银行来说是一个巨大的挑战。如何更好地利用云原生技术,帮助银行实现敏捷、轻量、快速、高效地进行开发、测试、交付和运维一体化,从而重构业务,推动金融科技的发展,是个长期课题。
灵雀云
2021/12/17
6220
​「DevOps 转型与实践」沙龙回顾第一讲
9 月 19 日,CODING 和中国 DevOps 社区联合举办的深圳第九届 Meetup 在腾讯大厦 2 楼多功能圆满结束。本次沙龙以 「DevOps 转型与实践」 为主题,4 位来自互联网、金融、零售行业的知名世界 500 强企业技术大咖,在现场分享了他们对于 DevOps 转型实践的见解和经验。80 多位观众与讲师们也进行了深入的技术探讨,共同探讨在 DevOps 潮流下,企业可能面临的新机遇和挑战。
腾讯云 CODING
2020/10/09
8130
蓝鲸DevOps深度解析系列(1):蓝盾平台总览
2018年10月,嘉为科技与腾讯云、蓝鲸智云携手,在北京、上海、广州、深圳举办 “研运一体,数据驱动,让运维走向运营”为主题的分享会,来自金融、电力、能源、制造等行业的数百家企业到场参加。
嘉为蓝鲸
2018/12/21
10.7K1
创新券商如何借道云原生实现进阶?
选择SpringCloud还是k8s,这也许不是关乎生死的哈姆雷特式诘问,但技术路线的抉择对整个开发进程乃至业务运行的影响,确实巨大而深远。
IT创事记
2022/08/30
3950
创新券商如何借道云原生实现进阶?
效能时代,数栈专属DevOps跑出加速度
互联网的发展形同潮水,来势汹汹、快而迅猛,企业业务日益庞大的同时伴随着团队规模的扩大,业务的复杂度与关联性显著提升的同时对效能也有了更高的要求,高效协同之间,我们既要追求快速交付,亦要保证产品的质量与稳定,两者之间产生了矛盾。DevOps作为这个矛盾平衡点,其概念最早于2009年被提出,并在近几年受到企业广泛的关注与实践。促使DevOps近年高频出现的原因,我们总结出以下两点:
袋鼠云数栈
2022/02/14
4390
深度好文|探寻云原生时代应用研发新模式
引言:伴随着基础设施技术升级,应用研发环境也从最初的传统 IT 架构、虚拟化 & 容器化架构演变到现在的云原生多云架构。“应用研发新模式”本身就是一个比较大的话题,我们也不敢说一个人或者一个团队就能把这个话题聊透彻。但随着应用研发基础架构环境的演进,应用研发模式一定是在不断地调整和创新。
开源小E
2022/04/12
5000
深度好文|探寻云原生时代应用研发新模式
传统企业 DevOps 基础设施架构规划之道
我们都知道 DevOps 诞生于互联网企业。Netflix、AWS等互联网企业号称每天往生产环境部署成百上千次。如此之快的部署频率让众多传统企业垂涎欲滴。所以大量的传统企业都纷纷投入巨资打造自己的 DevOps 基础设施 ,希望就此可以显著提高开发效率,加快新项目或新产品的投产速度。但是,他们对于 DevOps 基础架构是什么样子,需要具备哪些能力,如何构建,并没有一个很清晰的规划。
DevOps时代
2019/05/17
8600
当DevOps邂逅云原生
乌云笼罩下还敢谈创业?面对生存,小型创新企业如何把握领跑的机会 同样面临转型,为什么别人是华丽转身响彻寰宇,而你却东张西望波澜不起。悄悄告诉你,越来越多的企业的注意力转移到了客户和业务之间的交付价值,“精益求精,降本增效”真的像躺着赚钱一样不切实际嘛?不,不是你太接地气,是你的眼神疏漏犀利。突如其来的云原生带你细化云时代下企业转型的重要支撑点,窥探开发团队低效的根本原因,和DevOps手牵手,助你一直走。
可可爱爱没有脑袋
2019/12/19
1.6K0
当DevOps邂逅云原生
持续拥抱云原生,现代化应用将把云计算带进怎样的“新世界”?
云上的IT架构及服务创新,让传统私有部署模式望尘莫及。从虚拟机到容器,云计算通过不断细化服务颗粒度,持续刷新其降本提质增效的魔力。
科技云报道
2022/04/16
5580
持续拥抱云原生,现代化应用将把云计算带进怎样的“新世界”?
【Techo Day腾讯技术开放日】从大咖眼中读到腾讯云原生发展新机遇
通过周末两天对Techo Day腾讯技术开放日视频的学习,让我对云原生全栈开发的了解进一步加深,原来云原生如此高大上,又或者云原生原来如此 just so so~,无处不在的云原生到底怎样在影响开发者,面对云原生这种时代洪流,我们又应该怎样面对,下面我主要通过对各位专家老师的资料来展开论述,畅谈一下我眼中对云原生的新认识。
炒香菇的书呆子
2022/11/06
1.7K0
【Techo Day腾讯技术开放日】从大咖眼中读到腾讯云原生发展新机遇
《DevOps权威指南》电子试读版-第一章-DevOps的价值
通过对DevOps的概念、理念、发展轨迹、特点、总体架构与流程,以及实践过程中的工具链框架的打造和实践原则的描述,最终锚定DevOps的价值。随着DevOps原生理念的延伸,DevOps的价值变得更为丰富,无论是IT组织的各能力子域、IT组织自身,还是企业,均获得相应的收益。对于企业,产品的创新和市场占有率都需要IT组织的支撑能力和创新能力的提高。对于IT组织,IT能力决定了业务开展的深度和广度,自身的能力输出需要匹配甚至超越企业的业务发展。在IT组织内部的各能力子域,需要对IT能力输出负责,研发体系的敏捷,信息系统的安全、稳定和可靠,产品需求的精准,以及项目管理的完善和严谨都是必备条件。因此,在本章中,针对DevOps,我们将从多个维度对价值进行论述,对实践和落地过程提供锚定的指引。
顾黄亮
2022/01/09
6401
《DevOps权威指南》电子试读版-第一章-DevOps的价值
云原生背景下的运维价值思考与实践
作者:刘天斯,腾讯游戏高级工程师 前言 随着公司自研上云战略如火如荼地进行,IEG-增值服务部作为较早一批响应的团队,截止目前自研上云已完成1/3的流量切换,日PV超百亿。切云的服务大量采用了云原生的应用与技术架构,作为公司第一批面临云原生环境的业务运维,深切感受到云原生给运维工作带来的机遇与挑战,运维模式的转型已经迫在眉睫,此篇文章最大的价值在于将我们的转型思路、方法与实践,提供给后面更多面临同样挑战的团队借鉴与参考。下面我将从业务场景、运维转型之道、云端收益等几个方面来跟大家一起来探讨。 一、业务服
腾讯技术工程官方号
2020/11/27
2K0
CODING —— 云原生时代的研发工具领跑者
大家上午好,很高兴能有机会与大家分享 CODING 最近的一些新动作。今天主要分享的内容是 CODING 的战略升级和新产品介绍。在讲整个战略升级之前,我们先来讲一讲“为什么要做云原生时代的标准化工具”。大家都知道 CODING 一直在做开发者相关的工具,从代码托管开始,后来又做了 CI/CD、项目管理、制品库等等一系列工具。那么为什么我们认为在这个时代做这些工具会有更高的价值?
腾讯云 CODING
2021/10/29
1.2K0
CODING —— 云原生时代的研发工具领跑者
腾讯云小微AI语音助手云原生之路
云原生(CloudNative)是一个组合词,“云”表示应用程序运行于分布式云环境中,“原生”表示应用程序在设计之初就充分考虑到了云平台的弹性,就是为云设计的。可见,云原生并不是简单地使用云平台运行现有的应用程序,而是一种能充分利用云计算优势对应用程序进行设计、实现、部署、交付和操作的应用架构方法。
俞淦
2022/11/08
14.8K0
腾讯云小微AI语音助手云原生之路
云原生DevOps思考
经过二十多年的发展,云计算已经进入成熟阶段,成为了数字经济时代的新型信息基础设施。而云原生是一种构建和运行应用程序的方法,以充分利用云计算的优势。它包括微服务、容器、Kubernetes等技术,以支持弹性、可扩展和可移植的应用程序。是企业进行数字化转型、微服务架构转型的最佳技术实践路径,同时也成为热门领域——人工智能、大数据、边缘计算、物联网、5G、 区块链等底层平台的基础设施。
薛猫
2023/09/18
5800
云原生DevOps思考
推荐阅读
相关推荐
CODING DevOps 系列第三课:云计算、云原生模式下 DevOps 的建设
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档