三招搞定Python定时任务,总有一款适合你

时间:2025-09-04 11:00:02来源:互联网

下面小编就为大家分享一篇三招搞定Python定时任务,总有一款适合你,具有很好的参考价值,希望对大家有所帮助。

平时写代码的时候,经常遇到需要让程序“等一会儿”或者“定时执行”的情况吧?比如每天凌晨自动备份数据库,每隔一小时抓取一次网页数据,或者让程序延迟几秒再执行某个操作。今天我就来给大家聊聊Python实现定时任务的三种常用方法,分别是time、schedule和APScheduler。

先说说我最开始用的土办法——time模块,要实现个定时功能,直接import time,然后time.sleep(60)就让程序睡一分钟。简单粗暴,确实有效!

1. time模块

time模块是Python自带的,不用安装任何东西,直接import就能用。它的核心就两个方法:time.sleep()和time.time()。

sleep()方法可以让程序暂停指定的秒数,比如:

import time

print("程序开始")
time.sleep(5)  # 暂停5秒
print("5秒到了!")

而time()方法可以获取当前时间戳,用来计算时间间隔:

image.png

简单易用,无需安装额外库;但是功能单一,只能实现简单的延迟执行,无法处理复杂定时任务

不过在实际项目中,如果只用time模块实现每天定时执行,代码会写得比较臃肿,得自己写循环判断时间。

2. schedule库:轻量级定时任务利器

后来我发现了schedule这个库,简直像是打开了新世界的大门!它专门为定时任务设计,API设计得非常人性化。

首先需要安装:pip install schedule

image.png 它的用法读起来就像英语句子一样自然:

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)

image.png

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

image.png

功能比time模块丰富多了,而且是轻量级的不占资源;但是不够灵活需要配合起来使用。而且程序重启以后任务可能会丢失,这点得注意了!在单机环境下的简单定时任务,比如日常的自动化脚本、数据抓取等是可以进行使用的,基本上没啥问题。

3. APScheduler

现在工作中我最常用的是APScheduler(Advanced Python Scheduler),它确实配得上“Advanced”这个名字,功能强大到令人发指。

安装命令:pip install apscheduler

APScheduler支持三种调度器:

  • BlockingScheduler:阻塞式,适合单任务
  • BackgroundScheduler:后台运行,不影响主程序
  • AsyncIOScheduler:适配asyncio的版本

它还有四种触发器:

  • date:只执行一次
  • interval:间隔执行
  • cron:Linux crontab风格的定时任务
  • compound:组合触发器

来个实际例子:

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,功能全面,我们变成上流了,那不仅要吃的好还要吃的饱。
本站部分内容转载自互联网,如果有网站内容侵犯了您的权益,可直接联系我们删除,感谢支持!