【Python】300行代码实现crontab定时器功能 【上】

简介: 熟悉Linux的都知道在Linux下有一个crontab的定时任务,可以很方便的进行各种定时、计划任务的执行。有时候写代码也需要用到定时器业务,因此我使用Python实现了一个类似的定时器模块,可以很方便的做定时业务,使用例子如下:

【Python】300行代码实现crontab定时器功能


熟悉Linux的都知道在Linux下有一个crontab的定时任务,可以很方便的进行各种定时、计划任务的执行。有时候写代码也需要用到定时器业务,因此我使用Python实现了一个类似的定时器模块,可以很方便的做定时业务,使用例子如下:


微信截图_20220424094448.png


  具体Timer模块的代码也贴在下面,提供了与crontab定时任务类似的功能实现,第一次贴全部代码,格式弄的有点乱。


# -*- coding:utf-8 -*-
import re
import uuid
import time
import datetime
import threading
class TimerInfo:
  """定时器配置"""
  def __init__(self, timer_info, call_able, call_args):
     """创建定时器配置"""
     self.minutes = (-1, -1)   
     self.hours = (-1, -1)
     self.day_of_month = (-1, -1)
     self.month = (-1, -1)
     self.day_of_week = (-1, -1)
     self.enable = False     # 默认不可用
     self.last_check = None
     self._parse(timer_info)
     self.call_able = call_able
     self.call_args = call_args
     self.call_condition = None
     self.cur_condition = None
  def _parse(self, timer_info):
     """解析数据"""
     try:
        m, h, dfm, month, dfw = re.findall(r"\S+", timer_info)
        self.minutes = self._parse_part(m)
        self.hours = self._parse_part(h)
        self.day_of_month = self._parse_part(dfm)
        self.month = self._parse_part(month)
        self.day_of_week = self._parse_part(dfw)
        self.enable = True
        self.last_check = datetime.datetime.now()
     except Exception as e:
        print("invalid timer config : %s, error:%s" % (timer_info, e))
        return
  def _check_condition(self, condition, cur_value, delay_param, delay_transform=1):
     """检查条件"""
     if condition[0] < 0:
        return True
     if condition[0] == 0:
        if not self.check_target_value(condition[1], cur_value):
            return False
     # 每隔多久执行一次 */N 每隔N分钟执行一次
     elif condition[0] == 1:
        # 存在区间
        if isinstance(condition[1], list):
         if not self.check_range_value(cur_value, condition[1][0], condition[1][1]):
              return False
           if not self.check_delay_value(delay_param, condition[1][2] * delay_transform):
              return False
        # 间隔
        elif not self.check_delay_value(delay_param, condition[1] * delay_transform):
            return False
     # 多个M,N,X 在M,N,X时间执行
     elif condition[0] == 2:
       if not self.check_multi_value(cur_value, condition[1]):
           return False
     # 区间A-B
     elif condition[0] == 3:
       if not self.check_range_value(cur_value, condition[1][0], condition[1][1]):
           return False
     # 异常
     else:
        return False
     # 添加满足的条件
     self.cur_condition += "%s" % cur_value
     return True
  def on_timer(self, date_time):
     """执行检查"""
     if not self.enable:
        return False
     # 计算日期差值
     sub_time = date_time - self.last_check
     # 创建一个添加key,执行检查可能会成功,但运行过就不运行
     self.cur_condition = ""
     # 分
     if not self._check_condition(self.minutes, date_time.minute, sub_time.seconds, 60):
        self.call_condition = None
        return False
     # 时
     if not self._check_condition(self.hours, date_time.hour, sub_time.seconds, 3600):
        self.call_condition = None
        return False
     # 日
     if not self._check_condition(self.day_of_month, date_time.day, sub_time.days, 1):
         self.call_condition = None
         return False
     # 月
     if not self._check_condition(self.month, date_time.month, self._sub_months(self.last_check, date_time), 1):
         self.call_condition = None
         return False
     # 周
     if not self._check_condition(self.day_of_week, date_time.weekday(), sub_time.days/ 7, 1):
         self.call_condition = None
         return False
     # 满足条件则更新检查时间
     self.last_check = date_time
相关文章
|
3月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
664 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
3月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
105 5
|
18天前
|
机器学习/深度学习 算法 PyTorch
从零开始200行python代码实现LLM
本文从零开始用Python实现了一个极简但完整的大语言模型,帮助读者理解LLM的工作原理。首先通过传统方法构建了一个诗词生成器,利用字符间的概率关系递归生成文本。接着引入PyTorch框架,逐步重构代码,实现了一个真正的Bigram模型。文中详细解释了词汇表(tokenizer)、张量(Tensor)、反向传播、梯度下降等关键概念,并展示了如何用Embedding层和线性层搭建模型。最终实现了babyGPT_v1.py,一个能生成类似诗词的简单语言模型。下一篇文章将在此基础上实现自注意力机制和完整的GPT模型。
从零开始200行python代码实现LLM
|
18天前
|
机器学习/深度学习 人工智能 PyTorch
200行python代码实现从Bigram模型到LLM
本文从零基础出发,逐步实现了一个类似GPT的Transformer模型。首先通过Bigram模型生成诗词,接着加入Positional Encoding实现位置信息编码,再引入Single Head Self-Attention机制计算token间的关系,并扩展到Multi-Head Self-Attention以增强表现力。随后添加FeedForward、Block结构、残差连接(Residual Connection)、投影(Projection)、层归一化(Layer Normalization)及Dropout等组件,最终调整超参数完成一个6层、6头、384维度的“0.0155B”模型
200行python代码实现从Bigram模型到LLM
|
1月前
|
SQL 安全 算法
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
Python 3.14 引入了七大核心技术特性,大幅提升开发效率与应用安全性。其中包括:t-strings(PEP 750)提供更安全灵活的字符串处理;类型注解惰性求值(PEP 649)优化启动性能;外部调试器API标准化(PEP 768)增强调试体验;原生支持Zstandard压缩算法(PEP 784)提高效率;REPL交互环境升级更友好;UUID模块扩展支持新标准并优化性能;finally块语义强化(PEP 765)确保资源清理可靠性。这些改进使Python在后端开发、数据科学等领域更具竞争力。
72 5
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
|
1月前
|
数据采集 运维 API
把Postman调试脚本秒变Python采集代码的三大技巧
本文介绍了如何借助 Postman 调试工具快速生成 Python 爬虫代码,并结合爬虫代理实现高效数据采集。文章通过“跨界混搭”结构,先讲解 Postman 的 API 调试功能,再映射到 Python 爬虫技术,重点分享三大技巧:利用 Postman 生成请求骨架、通过 Session 管理 Cookie 和 User-Agent,以及集成代理 IP 提升稳定性。以票务信息采集为例,展示完整实现流程,探讨其在抗封锁、团队协作等方面的价值,帮助开发者快速构建生产级爬虫代码。
把Postman调试脚本秒变Python采集代码的三大技巧
|
27天前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
69 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
29天前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
274 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
5月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。

推荐镜像

更多