三招搞定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,功能全面,我们变成上流了,那不仅要吃的好还要吃的饱。

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

相关推荐
Sand(ContextGate)6 小时前
Python Agent 测试实战:测试与评估,让 Agent 像传统软件一样可交付
前端·javascript·python·microsoft·ai
颜进强6 小时前
20 · NestJs循环依赖与 forwardRef:容器为什么在环面前会死,"占位再补齐"怎么救
前端·后端·ai编程
颜进强6 小时前
19 · NestJs @Global 落地账:装饰器与 `isGlobal` 参数,各在什么场景上岗
前端·后端·ai编程
空心木偶☜7 小时前
LangChain 概述
python·ai·langchain·ai编程
她的男孩7 小时前
分片上传的大文件人人可下载:文件模块 isPrivate 在合并时被抹成 false,另有 4 个静默坑
java·后端·架构
lie..7 小时前
30天从零开始学AI应用开发(Day 19):项目二完结:RAG 知识库问答系统,把自己攒的资料变成私人顾问
开发语言·人工智能·python
颜进强7 小时前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
xn71337 小时前
Personal AI Agent 架构实战:Memory、权限、跨 App 与本地/云端设计
人工智能·后端·agent
谢亮_vipxieliang7 小时前
Go defer、panic与recover核心知识点
开发语言·后端·golang
颜进强7 小时前
17 · 自定义 Provider 四形态:useValue / useClass / useFactory / useExisting 到底在选什么
前端·后端·ai编程