celery指定任务执行时间
有业务线提出需求:要求对于其流量,只能在0点到7点扫描。
对此,celery发送任务到队列时可以指定执行的时间。
当worker收到任务后,判断还未到执行时间,会存储在worker中,在到达时候后再执行。
如果还未执行就中断worker,则任务会重新打回celery队列中,不担心丢失。
所以只需要传入time格式的具体执行时间就行。
Demo
import datetime
def in_run_time(start, end):
"""
用来给任务判断,在不在可执行的时间里,是不是需要丢到定时里
Args:
start: 任务开始执行的时间,格式如 "00:00:00"
end: 任务停止执行的时间,格式如 "07:00:00"
Returns:
"""
current_date = str(datetime.datetime.now().date()) + " "
start_time = datetime.datetime.strptime(current_date + start, '%Y-%m-%d %H:%M:%S')
end_time = datetime.datetime.strptime(current_date + end, '%Y-%m-%d %H:%M:%S')
current_date = datetime.datetime.now()
if (start_time < current_date) and (current_date < end_time):
return True
else:
return False
def get_nextday_run_time(start, end):
"""
根据当前时间,和起止时间,得出该任务应该执行的时间。
Args:
start: 任务开始执行的时间,格式如 "00:00:00"
end: 任务停止执行的时间,格式如 "07:00:00"
Returns:
"""
current_date = datetime.datetime.now().date()
end_time = datetime.datetime.strptime(str(current_date) + " " + end, '%Y-%m-%d %H:%M:%S')
current_time = datetime.datetime.now()
# 如果现在还没到今天的执行时间,那么任务放到今天的执行时间来执行
if current_time > end_time:
current_date += datetime.timedelta(days=1)
run_time_str = str(current_date) + " " + start
# 执行-北京时间
run_time = datetime.datetime.strptime(run_time_str, '%Y-%m-%d %H:%M:%S')
run_time = run_time + datetime.timedelta(hours=-8)
return run_time
def get_run_time_by_bj_time(bj_time):
"""
将时间格式字符串转换为datetime格式
Args:
bj_time: 指定执行时间 type-str 如 "2019-08-21 13:21:00"
Returns:
"""
run_time = datetime.datetime.strptime(bj_time, '%Y-%m-%d %H:%M:%S')
run_time = run_time + datetime.timedelta(hours=-8)
return run_time
start = "00:00:00"
end = "07:00:00"
work.apply_async(args=[scan_data], eta=get_nextday_run_time(start, end),
queue="队列名,没有可删除参数", routing_key="队列key,没有可删除参数")
celery指定任务执行时间的更多相关文章
- :setting:`task_soft_time_limit` celery 异步任务 执行时间限制 内存限制
https://docs.celeryproject.org/en/stable/userguide/configuration.html?highlight=control_exchange#new ...
- 分布式任务队列Celery入门与进阶
一.简介 Celery是由Python开发.简单.灵活.可靠的分布式任务队列,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务.Celery侧重于实时操作,但对调度支持也很好,其 ...
- python之celery的使用(一)
前段时间需要使用rabbitmq做写缓存,一直使用pika+rabbitmq的组合,pika这个模块虽然可以很直观地操作rabbitmq,但是官方给的例子太简单,对其底层原理了解又不是很深,遇到很多坑 ...
- python之celery使用详解一
前段时间需要使用rabbitmq做写缓存,一直使用pika+rabbitmq的组合,pika这个模块虽然可以很直观地操作rabbitmq,但是官方给的例子太简单,对其底层原理了解又不是很深,遇到很多坑 ...
- 使用Celery踩过的坑
为什么要使用celery Celery是一个使用Python开发的分布式任务调度模块,因此对于大量使用Python构建的系统,可以说是无缝衔接,使用起来很方便.Celery专注于实时处理任务,同时也支 ...
- celery:强大的定时任务模块
什么是celery 还是一个老生常谈的话题,假设用户注册,首先注册信息入库,然后要调用验证码服务接口,然后根据手机号发送验证码,最后再返回响应给浏览器.但显然调用接口.发送验证码之后成功再给浏览器响应 ...
- Celery分布式异步任务框架
一.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统.专注于实时处理的异步任务队列,同时也支持定时任务 二.Celery架构 1.Celery的架构由三部分组成: 消 ...
- 使用SQLIO测试磁盘性能
SQLIO 是一个用于测试存储系统能力的命令行工具,用以获取存储系统相关的性能指标,以判断系统的 I/O 处理能力. 在微软的网站可以下载 SQLIO 的安装包,安装后目录中会出现如下文件: EULA ...
- 定时调度框架Quartz随笔
最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...
随机推荐
- PHP LUHN算法验证银行卡
<?php /* 16-19 位卡号校验位采用 Luhn 校验方法计算: 第一步:把信用卡号倒序(61789372994) 第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1.(eg:s1 ...
- 如何使用C++实现单链表
线性表--链表 为什么假期也在发文章 //TODO NullGirlfrindException 请忽略以上两行无聊的事实...... 如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种 ...
- 关于epoll,select,poll的理解
select: 轮询+fd_set 1.采用fd_set存储fd(fd_set通过数组位图实现) 2.每次调用select,都需要把fd集合从用户态拷贝到内核态,fd越多开销越大 3.每次调用sele ...
- RabbitMQ基础命令rabbitmqctl
官网文档 https://www.rabbitmq.com/rabbitmqctl.8.html 一般操作命令后台管理页面都有的,部分没有(应用程序管理,和集群管理). 直接使用命令,必须配置环境变量 ...
- FZU2018级算法第五次作业 missile(排序+枚举)
在解题报告之前,首先对同一次作业中另外一题(求逆序对)某人在未经冰少允许情况下,擅自登录冰少账号,原模原样剽窃冰少代码,并且最终还被评为优秀作业的行为表示严正抗议! 题目大意: 二维平面上给出 n 个 ...
- thinkphp5.0数据导出excel表格
第一步.创建Model类文件(名称自定) 第二步.在类中写入以下代码 <?php namespace Admin\admin\model; use think\Model; class Mark ...
- python基础 — 链接 Mysql 创建 数据库和创表
重点: 1. 链接服务器的数据库 2. 创建表和格式 3. 插入多行数据 import pymysql try: host='xxx' user='xxx' passwd='xxx' db='test ...
- RT-Flash imxrt 系列rt1052 rt1060量产神器宣传
转载: 恩智浦半导体2017年10月正式发布了业内首款跨界处理器—i.MX RT系列,超强的性能.超高的性价比使得i.MX RT系列火遍大江南北,一度成为基于MCU的产品主控首选,尤其是那些对于性能有 ...
- sass快速使用
sass的使用 建议使用一种语法格式(scss) scss sass转换 sass-convert main.scss main.sass sass变量声明 example: $headline-ff ...
- java模板模式项目中使用--封装一个http请求工具类
需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...