schedule,任务调度精灵 Python 库!
大家好,我是猫哥!今天要给大家介绍一个超级实用的Python定时任务库 - schedule。它就像是一个智能闹钟,可以帮我们在指定的时间执行特定的任务。无论是定时备份数据、发送日报,还是定期清理日志,schedule都能轻松搞定。最棒的是,它的语法简单直观,即使是Python新手也能快速上手!
安装和基本使用
首先,通过pip安装schedule:
pip install schedule
来看一个最简单的例子:
import schedule
import time
def job():
print("我是一个定时任务!")
# 每10秒执行一次
schedule.every(10).seconds.do(job)
# 保持程序运行
while True:
schedule.run_pending()
time.sleep(1)
小贴士:run_pending()会检查是否有待执行的任务,sleep(1)避免CPU空转。
灵活的时间设置
schedule支持多种时间设置方式,就像我们平常设置闹钟一样直观:
import schedule
def morning_task():
print("早上好!开始新的一天")
def backup_data():
print("开始备份数据...")
# 每天早上7点执行
schedule.every().day.at("07:00").do(morning_task)
# 每隔1小时执行
schedule.every(1).hour.do(backup_data)
# 每周一执行
schedule.every().monday.do(lambda: print("周一快乐!"))
# 每个月最后一天执行
schedule.every().month.at("00:00").do(lambda: print("月末总结时间到!"))
任务管理
1. 取消任务
import schedule
def boring_task():
print("这是一个无聊的任务")
# 创建任务并保存返回值
job = schedule.every(1).hour.do(boring_task)
# 取消任务
schedule.cancel_job(job)
2. 给任务添加标签
import schedule
def send_email():
print("发送邮件...")
def clean_logs():
print("清理日志...")
# 添加标签
schedule.every().day.at("09:00").do(send_email).tag('email-tasks')
schedule.every().day.at("23:00").do(clean_logs).tag('maintenance')
# 获取特定标签的任务
email_jobs = schedule.get_jobs('email-tasks')
# 取消特定标签的任务
schedule.clear('maintenance')
实战应用
1. 自动备份系统
import schedule
import shutil
from datetime import datetime
def backup_system():
# 生成备份文件名
backup_name = f"backup_{datetime.now().strftime('%Y%m%d_%H%M')}"
try:
shutil.make_archive(backup_name, 'zip', '/path/to/backup')
print(f"备份成功:{backup_name}")
except Exception as e:
print(f"备份失败:{str(e)}")
# 每天凌晨2点执行备份
schedule.every().day.at("02:00").do(backup_system)
2. 定时发送报告
import schedule
import smtplib
from email.message import EmailMessage
def send_daily_report():
msg = EmailMessage()
msg.set_content("这是每日报告内容...")
msg['Subject'] = '每日工作报告'
msg['From'] = "me@example.com"
msg['To'] = "boss@example.com"
try:
server = smtplib.SMTP('smtp.example.com')
server.send_message(msg)
server.quit()
print("报告发送成功!")
except Exception as e:
print(f"发送失败:{str(e)}")
# 每个工作日下午6点发送
schedule.every().monday.to.friday.at("18:00").do(send_daily_report)
高级技巧
1. 装饰器方式
import schedule
@schedule.repeat(schedule.every(1).hour)
def important_task():
print("这是一个重要任务")
2. 随机延迟执行
import schedule
import random
import time
def job_with_random_delay():
delay = random.randint(1, 60)
time.sleep(delay)
print(f"延迟{delay}秒后执行")
schedule.every(1).hour.do(job_with_random_delay)
注意事项
schedule不支持秒级别的精确控制
默认是单线程执行,长任务会阻塞其他任务
程序退出后任务就会停止,需要自行处理持久化
任务执行时间最好错开,避免冲突
练习题
实现一个工作日每天早上9点自动打开常用网站的程序
编写一个每周五下午自动生成周报的脚本
开发一个定时清理临时文件的工具
总结
schedule的优势:
简单易用,语法直观
灵活的时间设置
方便的任务管理
适合轻量级应用
适用场景:
定时备份
报告生成
数据同步
系统维护
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问猫哥哦。祝大家学习愉快,Python学习节节高!
#Python学习 #schedule #任务调度 #Python编程
领取专属 10元无门槛券
私享最新 技术干货