有业务线提出需求:要求对于其流量,只能在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,没有可删除参数")

最新文章

  1. LeetCode#11. Container With Most Water
  2. (原创) 巩固理解I2C协议(MCU,经验)
  3. 何必苦等VS2015?来看看VS2013下实现移动端的跨平台开发
  4. codeforces 336 Div.2 B. Hamming Distance Sum
  5. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》
  6. WinForm中 事件 委托 多线程的应用
  7. 机器学习入门04 - 使用TensorFlow的起始步骤 (First Steps with TensorFlow)
  8. Win10下创建Python3.7创建虚拟环境以及安装Flask框架
  9. Windows 操作系统
  10. 一句话shell【php】
  11. Java基类和派生类
  12. mac安装pyspider报错
  13. IntelliJ IDEA2018.1、2017.3激活
  14. 获取session
  15. SQL语句添加删除修改字段
  16. sqlserver判断是否为数字的函数
  17. xshell-常用指令汇总 linux 常用指令
  18. 31Sql数据库的连接
  19. UVA 624(01背包记录路径)
  20. 如何卸载掉eclipse中的插件

热门文章

  1. picard报错
  2. pycharm远程调试或运行代码
  3. [Xamarin] - 连接 Mac Agent 显示 &quot;couldn&#39;t connect to xxxx, please try again&quot; 之解决
  4. composer 无法配置命令行写入配置文件问题
  5. WUSTOJ 1319: 球(Java)并查集
  6. 约会II
  7. nodeJs+vue安装教程详解 相信
  8. 错误 4 error C2039: “Sleep”: 不是“boost::this_thread”的成员
  9. MySQL LAST_INSERT_ID()用法
  10. 使用 pykafka 进行消费