有业务线提出需求:要求对于其流量,只能在0点到7点扫描。

对此,celery发送任务到队列时可以指定执行的时间。

当worker收到任务后,判断还未到执行时间,会存储在worker中,在到达时候后再执行。

如果还未执行就中断worker,则任务会重新打回celery队列中,不担心丢失。

所以只需要传入time格式的具体执行时间就行。

Demo
  1. import datetime
  2. def in_run_time(start, end):
  3. """
  4. 用来给任务判断,在不在可执行的时间里,是不是需要丢到定时里
  5. Args:
  6. start: 任务开始执行的时间,格式如 "00:00:00"
  7. end: 任务停止执行的时间,格式如 "07:00:00"
  8. Returns:
  9. """
  10. current_date = str(datetime.datetime.now().date()) + " "
  11. start_time = datetime.datetime.strptime(current_date + start, '%Y-%m-%d %H:%M:%S')
  12. end_time = datetime.datetime.strptime(current_date + end, '%Y-%m-%d %H:%M:%S')
  13. current_date = datetime.datetime.now()
  14. if (start_time < current_date) and (current_date < end_time):
  15. return True
  16. else:
  17. return False
  18. def get_nextday_run_time(start, end):
  19. """
  20. 根据当前时间,和起止时间,得出该任务应该执行的时间。
  21. Args:
  22. start: 任务开始执行的时间,格式如 "00:00:00"
  23. end: 任务停止执行的时间,格式如 "07:00:00"
  24. Returns:
  25. """
  26. current_date = datetime.datetime.now().date()
  27. end_time = datetime.datetime.strptime(str(current_date) + " " + end, '%Y-%m-%d %H:%M:%S')
  28. current_time = datetime.datetime.now()
  29. # 如果现在还没到今天的执行时间,那么任务放到今天的执行时间来执行
  30. if current_time > end_time:
  31. current_date += datetime.timedelta(days=1)
  32. run_time_str = str(current_date) + " " + start
  33. # 执行-北京时间
  34. run_time = datetime.datetime.strptime(run_time_str, '%Y-%m-%d %H:%M:%S')
  35. run_time = run_time + datetime.timedelta(hours=-8)
  36. return run_time
  37. def get_run_time_by_bj_time(bj_time):
  38. """
  39. 将时间格式字符串转换为datetime格式
  40. Args:
  41. bj_time: 指定执行时间 type-str 如 "2019-08-21 13:21:00"
  42. Returns:
  43. """
  44. run_time = datetime.datetime.strptime(bj_time, '%Y-%m-%d %H:%M:%S')
  45. run_time = run_time + datetime.timedelta(hours=-8)
  46. return run_time
  47. start = "00:00:00"
  48. end = "07:00:00"
  49. work.apply_async(args=[scan_data], eta=get_nextday_run_time(start, end),
  50. 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. 021 Android 查询已经导入到工程中的数据库+抖动效果

    1.将数据库(.db)文件放入工程中 在project状态下,新建assets文件夹,并将数据库文件放入assets目录下. 注意:assets目录.java目录.res目录是同级的 new---&g ...

  2. box-shadow 用法总结

    一.基础知识 box-shadow 属性向框添加一个或多个阴影. 语法 box-shadow: offset-x offset-y blur spread color inset; box-shado ...

  3. IntelliJ IDEA - 查找代码提交人

    转载. https://blog.csdn.net/abcyyjjkk/article/details/88995503 如果Annocation不可用

  4. Python中关于Lambda函数的使用总结

    lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...

  5. 20191113-Linux+robotframework+jenkins配置自动化测试2

    第八步:配置jenkins 安装JDK a)     yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel 配置环境变量 a)     vi ...

  6. Codeforces Round #419 (Div. 1) (ABCD)

    1. 815A Karen and Game 大意: 给定$nm$矩阵, 每次选择一行或一列全部减$1$, 求最少次数使得矩阵全$0$ 贪心, $n>m$时每次取一列, 否则取一行 #inclu ...

  7. [The 2019 Asia Yinchuan First Round Online Programming] D Take Your Seat

    也许更好的阅读体验 \(\mathcal{Description}\) 原题链接 题目大意 该题目有两个问题 \(Task\ 1\),有\(n\)个人\(n\)个座位,每个人都有一个对应的座位,每个人 ...

  8. jQueryUI的widget的Hello World

    为了看懂jQuery-File-Upload里面的代码,所以学习到这里 //main.js //实践自定义jquery widget,风格1 (function($){ //$.widget('命名空 ...

  9. 你不知道的JSON.stringify知识点

    1. 定义 stringify 函数的定义: JSON.stringify(value [, replacer [, space]]) 参数: value : 将要转为JSON字符串的javascri ...

  10. linux--安全加固脚本

    Linux安全加固配置 #! /bin/bash# copyright by hwb# Function:对账户的密码的一些加固read -p "设置密码最多可多少天不修改:" A ...