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

平时写代码的时候,经常遇到需要让程序"等一会儿"或者"定时执行"的情况吧?比如每天凌晨自动备份数据库,每隔一小时抓取一次网页数据,或者让程序延迟几秒再执行某个操作。今天我就来给大家聊聊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,功能全面,我们变成上流了,那不仅要吃的好还要吃的饱。

本次分享就到这里,祝愿大家早日实现财富自由!

相关推荐
刘祯昊5 小时前
中望CAD二次开发(一)——开发环境配置
后端·c#
唐天一5 小时前
Rust语法之模块系统
后端
唐天一5 小时前
Rust面向对象:简单总结impl ... for ... 结构在 Rust 中两种主要用途
后端
唐天一5 小时前
Rust语法之面向对象编程
后端
CodeDevMaster5 小时前
从零开始:用uv构建并发布一个Python CLI应用,集成CI/CD自动化发布与Docker容器化部署
python·ci/cd·docker
brzhang5 小时前
Google 浏览器出了一个超级好用的功能,Gemini 原生支持,帮你解决性能问题
前端·后端·架构
文人sec6 小时前
性能测试-jmeter7-元件提取器
python·jmeter·prometheus·模块测试
京东云开发者6 小时前
KCP协议应用详解:为速度而生的可靠传输协议
后端
洛卡卡了6 小时前
适配私有化部署,我手写了套支持离线验证的 License 授权系统
java·后端·架构