admin 管理员组

文章数量: 1103777

一、Schedule 库简介

Schedule 是 Python 生态中 ​轻量级且功能强大的定时任务调度库,专为简化周期性任务管理而设计。其核心优势包括:

  1. 极简语法:以近乎自然语言的方式定义任务(如 schedule.every().day.at("08:00")),无需复杂配置。
  2. 灵活调度:支持秒、分、小时、天、周等多维度时间单位,以及精确到秒的定时触发。
  3. 轻量高效:仅 200+ 行代码实现核心功能,适合快速集成到项目中。
  4. 扩展性强:支持任务参数传递、动态调整、异常捕获和并发执行,满足进阶需求。

 

二、安装与验证
  1. 安装命令

    bash

    pip install schedule  # 通过 pip 安装[1,5](@ref)
  2. 验证安装

    python

    import schedule
    print(schedule.__version__)  # 输出版本号(如 1.2.0)[2](@ref)

 

三、核心函数与用法
1. 基础任务调度
函数/方法功能描述示例代码
​**schedule.every(interval).seconds**每隔 N 秒执行任务schedule.every(10).seconds.do(job)
​**schedule.every().hour.at(":30")**每小时的第 30 分钟执行schedule.every().hour.at(":30").do(backup_data)
​**schedule.every().day.at("08:00")**每天固定时间执行schedule.every().day.at("08:00").do(send_email)
​**schedule.every().monday.at("09:00")**每周一特定时间执行schedule.every().monday.at("09:00").do(generate_report)
​**schedule.run_pending()**运行所有待执行任务(需配合循环使用)while True: schedule.run_pending(); time.sleep(1)

 2. 任务管理

函数/方法功能描述示例代码
​**job = schedule.every(...).do(func)**获取任务对象以进行后续管理job = schedule.every(5).minutes.do(clean_cache)
​**schedule.cancel_job(job)**取消特定任务schedule.cancel_job(job)
​**schedule.clear()**清除所有任务schedule.clear()
​**schedule.get_jobs()**获取当前所有任务列表for job in schedule.get_jobs(): print(job)

 

3. 高级功能
  • 带参数的任务

    python

    def backup(folder, target="cloud"):
        print(f"备份 {folder} 到 {target}")
    schedule.every().saturday.do(backup, "work_docs", target="nas")  # 传递参数[1,4](@ref)
  • 装饰器模式

    python

    @schedule.repeat(schedule.every().hour)
    def monitor_server():
        if check_cpu() > 90: send_alert()  # 自动注册任务[1,2](@ref)
  • 异常处理与日志

    python

    import logging
    logging.basicConfig(level=logging.INFO)
    
    def with_retry(func):
        @wraps(func)
        def wrapper(*args, ​**kwargs):
            try:
                return func(*args, ​**kwargs)
            except Exception as e:
                logging.error(f"任务失败: {e}")
        return wrapper
    
    @with_retry
    def risky_task():
        # 可能抛出异常的任务
        pass  # 自动捕获并记录错误[2,6](@ref)

四、应用场景
  1. 自动化办公

    • 每天 8:00 发送日报邮件。
    • 每周五生成销售报表并邮件通知团队。
  2. 智能家居控制

    • 工作日早晨 7:00 自动开灯,晚上 23:00 关灯。
    • 周末根据天气预报调整空调温度。
  3. 数据监控与处理

    • 每 5 分钟检查服务器负载并触发告警。
    • 每小时备份数据库到云端。
  4. 网络爬虫与采集

    • 定时抓取电商价格并分析波动。
    • 每天凌晨清理临时文件释放存储空间。

五、注意事项
  1. 性能优化

    • 使用 time.sleep(1) 减少 CPU 占用,避免空转。
    • 复杂任务建议结合多线程/异步执行。
  2. 时区处理

    • 默认使用系统时区,跨时区项目需手动调整。
  3. 异常处理

    • 关键任务需添加重试机制(如 retrying 库)。
  4. 生产环境建议

    • 对于长期运行的任务,推荐使用 schedule.run_continuously() 替代循环。

本文标签: 详解 python schedule