有业务线提出需求:要求对于其流量,只能在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指定任务执行时间的更多相关文章

  1. :setting:`task_soft_time_limit` celery 异步任务 执行时间限制 内存限制

    https://docs.celeryproject.org/en/stable/userguide/configuration.html?highlight=control_exchange#new ...

  2. 分布式任务队列Celery入门与进阶

    一.简介 Celery是由Python开发.简单.灵活.可靠的分布式任务队列,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务.Celery侧重于实时操作,但对调度支持也很好,其 ...

  3. python之celery的使用(一)

    前段时间需要使用rabbitmq做写缓存,一直使用pika+rabbitmq的组合,pika这个模块虽然可以很直观地操作rabbitmq,但是官方给的例子太简单,对其底层原理了解又不是很深,遇到很多坑 ...

  4. python之celery使用详解一

    前段时间需要使用rabbitmq做写缓存,一直使用pika+rabbitmq的组合,pika这个模块虽然可以很直观地操作rabbitmq,但是官方给的例子太简单,对其底层原理了解又不是很深,遇到很多坑 ...

  5. 使用Celery踩过的坑

    为什么要使用celery Celery是一个使用Python开发的分布式任务调度模块,因此对于大量使用Python构建的系统,可以说是无缝衔接,使用起来很方便.Celery专注于实时处理任务,同时也支 ...

  6. celery:强大的定时任务模块

    什么是celery 还是一个老生常谈的话题,假设用户注册,首先注册信息入库,然后要调用验证码服务接口,然后根据手机号发送验证码,最后再返回响应给浏览器.但显然调用接口.发送验证码之后成功再给浏览器响应 ...

  7. Celery分布式异步任务框架

    一.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统.专注于实时处理的异步任务队列,同时也支持定时任务 二.Celery架构 1.Celery的架构由三部分组成: 消 ...

  8. 使用SQLIO测试磁盘性能

    SQLIO 是一个用于测试存储系统能力的命令行工具,用以获取存储系统相关的性能指标,以判断系统的 I/O 处理能力. 在微软的网站可以下载 SQLIO 的安装包,安装后目录中会出现如下文件: EULA ...

  9. 定时调度框架Quartz随笔

    最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...

随机推荐

  1. linux 给运行程序指定动态库路径

    1. 连接和运行时库文件搜索路径到设置 库文件在连接(静态库和共享 库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/li ...

  2. Nio学习笔记(大部分网上摘抄)

    Nio与IO的区别 原有的 IO 是面向流的.阻塞的,NIO 则是面向块的.非阻塞的. 1.IO流每次从流中读一个或多个字节,直至读完所有字节,他们没有被缓存在其他地方,并且,IO流不能移动流中的数据 ...

  3. Matlab R2017b 打开后一直显示“正在初始化”,导致无法运行命令

    1. 前言 Matlab R2017b打开后一直显示"正在初始化",导致无法运行命令. 2. 解决方案 1. 找到并记录授权文件license_standalone.lic的路径. ...

  4. Python 编程入门

    我喜欢直接了当, 这次主要是推荐蟒营大妈的 Python 入门课(https://py.101.camp), 还有不到一周就要开课了, 欢迎转发推荐~ 点击"夏日大作战:从小白到小能手的 P ...

  5. RT-Flash imxrt 系列rt1052 rt1060量产神器宣传

    转载: 恩智浦半导体2017年10月正式发布了业内首款跨界处理器—i.MX RT系列,超强的性能.超高的性价比使得i.MX RT系列火遍大江南北,一度成为基于MCU的产品主控首选,尤其是那些对于性能有 ...

  6. C# 用Redis实现的分布式锁

    Redis实现分布式锁(悲观锁/乐观锁) 对锁的概念和应用场景在此就不阐述了,网上搜索有很多解释,只是我搜索到的使用C#利用Redis的SetNX命令实现的锁虽然能用,但是都不太适合我需要的场景. 基 ...

  7. Win7下搭建Go语言开发环境

    Win7下搭建Go语言开发环境 1 下载适合window版本的Go安装包,下载地址http://code.google.com/p/go/downloads/list 2 下载适合window本本的L ...

  8. 学习到目前,自己封装的db类和pdo类

    DB封装类 <?php class DBDA { public $host = "localhost"; public $uid = "root"; pu ...

  9. day14-python之集合函数字符串格式化

    1.集合 #!/usr/bin/env python # -*- coding:utf-8 -*- # s=set(['alex','alex','sb']) # print(s) # s=set(' ...

  10. linux查看日志报错

    查看运行时错误: tail  -f  catalina.out   | grep   -C   10  'Exception'          10是行数: 单引号里面的是要查找的关键字: