平时写代码的时候,经常遇到需要让程序"等一会儿"或者"定时执行"的情况吧?比如每天凌晨自动备份数据库,每隔一小时抓取一次网页数据,或者让程序延迟几秒再执行某个操作。今天我就来给大家聊聊Python实现定时任务的三种常用方法,分别是time、schedule和APScheduler。
先说说我最开始用的土办法------time模块,要实现个定时功能,直接import time,然后time.sleep(60)就让程序睡一分钟。简单粗暴,确实有效!
1. time模块
time模块是Python自带的,不用安装任何东西,直接import就能用。它的核心就两个方法:time.sleep()和time.time()。
sleep()方法可以让程序暂停指定的秒数,比如:
python
import time
print("程序开始")
time.sleep(5) # 暂停5秒
print("5秒到了!")
而time()方法可以获取当前时间戳,用来计算时间间隔:

简单易用,无需安装额外库;但是功能单一,只能实现简单的延迟执行,无法处理复杂定时任务
不过在实际项目中,如果只用time模块实现每天定时执行,代码会写得比较臃肿,得自己写循环判断时间。
2. schedule库:轻量级定时任务利器
后来我发现了schedule这个库,简直像是打开了新世界的大门!它专门为定时任务设计,API设计得非常人性化。
首先需要安装:pip install schedule
它的用法读起来就像英语句子一样自然:
python
import schedule
import time
def job():
print("我在工作...")
# 每10分钟执行一次
schedule.every(10).minutes.do(job)
# 每天10:30执行
schedule.every().day.at("10:30").do(job)
# 每周一执行
schedule.every().monday.do(job)
while True:
schedule.run_pending()
time.sleep(1)

看到没有?代码几乎可以当英文读:"every 10 minutes do job",太直观了!如果想设置成其他的也是可以的,里面还有小时,秒,天等函数,根据自己的需求调用就行了。截图看一看

功能比time模块丰富多了,而且是轻量级的不占资源;但是不够灵活需要配合起来使用。而且程序重启以后任务可能会丢失,这点得注意了!在单机环境下的简单定时任务,比如日常的自动化脚本、数据抓取等是可以进行使用的,基本上没啥问题。
3. APScheduler
现在工作中我最常用的是APScheduler(Advanced Python Scheduler),它确实配得上"Advanced"这个名字,功能强大到令人发指。
安装命令:pip install apscheduler
APScheduler支持三种调度器:
- BlockingScheduler:阻塞式,适合单任务
- BackgroundScheduler:后台运行,不影响主程序
- AsyncIOScheduler:适配asyncio的版本
它还有四种触发器:
- date:只执行一次
- interval:间隔执行
- cron:Linux crontab风格的定时任务
- compound:组合触发器
来个实际例子:
python
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
print('工作完成!')
# 创建调度器
scheduler = BlockingScheduler()
# 添加任务:每周一到周五早上9点执行
scheduler.add_job(job, 'cron', day_of_week='mon-fri', hour=9)
# 添加任务:每隔2小时执行一次
scheduler.add_job(job, 'interval', hours=2)
try:
scheduler.start()
except KeyboardInterrupt:
print("程序退出")
APScheduler还支持任务持久化(可以把任务保存到数据库)、分布式部署、任务监控等高级功能。 功能全面强大肯定就不用说了,而且支持持久化灵活性也强支持多种出发方式
总结对比
为了更直观,我做了个对比表格:
特性 | time模块 | schedule库 | APScheduler |
---|---|---|---|
安装难度 | 无需安装 | pip安装 | pip安装 |
学习成本 | 低 | 很低 | 中等 |
功能丰富度 | 简单 | 中等 | 丰富 |
持久化支持 | 否 | 否 | 是 |
分布式支持 | 否 | 否 | 是 |
适用场景 | 简单延迟 | 日常脚本 | 生产环境 |
怎么选择?
- 刚入门:先用time模块理解基本概念,毕竟刚开始就上强度谁能受得了,程序员压力够大了!哈哈
- 写日常脚本:schedule是不二之选,简单够用,够用就行了,就跟吃饭一样能吃饱就行了。
- 开发正式项目:果断上APScheduler,功能全面,我们变成上流了,那不仅要吃的好还要吃的饱。
本次分享就到这里,祝愿大家早日实现财富自由!