我的知识记录

Python schedule 定时任务执行教程:轻量级任务调度入门

Python schedule 库实现定时任务调度,支持分、时、天、周几等多种触发方式,配合 while 循环跑后台任务,适合数据抓取、报表生成、定时提醒等办公自动化场景。

场景痛点

每天到点手动跑数据报表、定时检查库存、定期推送监控消息,靠人盯时间既容易忘,又浪费时间。Windows 任务计划、Linux crontab 配置起来繁琐,跨平台迁移还麻烦。用 Python 的 schedule 库,十几行代码就能把定时任务写进脚本,跟着主程序一直跑,灵活又好维护。

用到的库

pip install schedule

完整代码

import schedule
import time
from datetime import datetime


# 定义要定时执行的任务
def job_report():
"""生成日报表的任务"""
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{now}] 正在生成今日销售日报...")
# 这里替换成你自己的业务逻辑:读数据库、生成Excel、发邮件等
print("日报已生成完毕。")


def job_clean_cache():
"""清理临时缓存的任务"""
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{now}] 正在清理临时缓存文件...")
print("缓存清理完成。")


def main():
# 每 10 分钟执行一次报表任务
schedule.every(10).minutes.do(job_report)

# 每小时整点执行一次清理任务
schedule.every().hour.do(job_clean_cache)

# 每天 09:00 执行一次报表任务
schedule.every().day.at("09:00").do(job_report)

# 每周一 10:30 执行一次清理任务
schedule.every().monday.at("10:30").do(job_clean_cache)

print("定时任务已启动,按 Ctrl+C 退出...")

# 主循环:不断检查是否有任务到点
while True:
schedule.run_pending()
time.sleep(1)


if __name__ == "__main__":
main()

代码讲解

  • schedule.every(10).minutes.do(func):注册一个每 10 分钟执行一次的任务。
  • schedule.every().hour.do(func):每小时整点触发。
  • schedule.every().day.at("09:00").do(func):每天指定时间触发,时间字符串用 24 小时制 HH:MM
  • schedule.every().monday.at("10:30"):指定星期几的具体时间触发,也支持 .tuesday.wednesday 等。
  • schedule.run_pending():在循环里不断检查注册的任务是否到点,到点就执行。
  • time.sleep(1):每秒轮询一次,避免 CPU 空转。

运行结果

运行脚本后控制台持续打印当前时间和任务执行情况,到点会自动输出"正在生成今日销售日报"等信息。保持窗口不关,任务就会按计划周期触发。按 Ctrl+C 可退出。

注意事项

  • schedule 是单线程串行执行,某个任务卡住会阻塞后续任务;长耗时任务请放到子线程或子进程里跑。
  • 脚本窗口关闭后任务就停了,想长期后台运行请配合 nohup、pm2 或 Windows 计划任务。
  • 任务时间取的是本机系统时间,服务器时区要确认对。
  • schedule 不支持秒级精度调度(默认轮询间隔决定),高频需求建议改用 APScheduler 或系统 crontab。

Python schedule 定时任务执行教程:轻量级任务调度入门

标签:

更新时间:2026-09-14 20:36:36

上一篇:Python 读取屏幕像素颜色:pyautogui 取色器与监控

下一篇:Python 打开文件夹或用默认程序打开文件:跨平台方法