CodeGym /课程 /Python SELF ZH /使用 schedule 库定时运行任务

使用 schedule 库定时运行任务

Python SELF ZH
第 39 级 , 课程 4
可用

1. 介绍 schedule 库

在这节课里,我们就像一台精准的时钟,学习如何设置代码按照时间表来运行,让我们的代码在我们想要的时候启动。准备好了吗?今天我们要征服时间!

schedule 是一个轻量化的模块,可以按照指定的时间表运行函数。如果你的代码需要在特定时间执行,比如每天早上 6 点收集数据,或者发送每日提醒,那么 schedule 就是你需要的。

以下是 schedule 的主要优点:

  • 简单:直观的界面,比标准的 cronthreading 方法更易使用。
  • 轻便:只有必要的功能,没有多余的东西。
  • 清晰:几乎像自然语言一样设置时间表。

安装库

开始之前,我们需要安装 schedule 库。像大多数 Python 库一样,使用 pip

Bash
pip install schedule

好了,现在一切就绪,让我们进入自动化的世界,看看 schedule 如何改变你的日常工作。

schedule 库的主要方法

schedule 提供了多种设置任务时间和执行频率的方法:

  • every().day.at("HH:MM") — 每天特定时间执行任务。
  • every().hour — 每小时执行一次任务。
  • every().minute — 每分钟执行一次任务。
  • every().week.at("HH:MM") — 每周特定时间执行任务。
  • every().monday.at("HH:MM") — 每周一的特定时间运行任务。
  • every(10).seconds — 每 10 秒(或任意时间间隔)执行一次任务。

2. 设置重复任务

让我们从简单的例子开始——计划一个每小时运行的函数。我们会创建一个简单的函数,输出一条问候语,并按照时间表运行它。

例子:每小时问候一次

Python

import schedule
import time

def say_hello():
    print("你好!我们正在搞钟表式自动化。")

# 每小时触发一次 say_hello 函数
schedule.every().hour.do(say_hello)

while True:
    # 触发所有到时间的任务
    schedule.run_pending()
    time.sleep(1)

这就是你的第一个 schedule 脚本了!在这个例子中,我们用 every().hour.do(say_hello) 方法,每小时问候一次“你好!”。惊讶吧?

命令 schedule.every().hour.do(say_hello) 并不会直接执行函数 say_hello,而是将它的调用加入时间表。在合适的时间,通过 schedule.run_pending() 调用,会真正触发函数运行。

3. 设置更复杂的间隔

如果我们想要定时任务不仅仅是每小时启动,比如每 10 分钟运行一次或者在特定的星期几运行怎么办?schedule 支持大多数常见的时间表达式,你可以轻松使用它们。

例子:每 10 分钟运行一次任务

Python

import schedule
import time

def task():
    print("这个任务每 10 分钟运行一次。")

# 计划任务每 10 分钟运行一次
schedule.every(10).minutes.do(task)

while True:
    schedule.run_pending() # 触发所有到时间的任务
    time.sleep(1)

例子:特定星期的任务

现在我们尝试计划一个任务,每周一和周三的早上 9 点运行。

Python

import schedule
import time

def monday_wednesday_task():
    print("这个任务在每周一和周三的早上 9 点运行。")

# 周一和周三早上 9 点运行任务
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)

while True:
    schedule.run_pending()
    time.sleep(1)

可以看到,schedule 支持多种时间表达式,包括星期几和精确时间启动。这对同步你的工作或者计划好的事件非常方便。

4. 处理不同时间条件的任务

如果你的脚本有多个任务,每个任务有自己的时间表,schedule 能轻松解决这个问题。例如,一个任务每天早上运行,另一个则在周五运行。

例子:在同一个脚本中结合不同任务

Python

import schedule
import time

def morning_task():
    print("早上好!现在是早晨任务时间。")

def friday_task():
    print("周五来了!现在是周五任务时间。")

# 每天早上 7:30 的任务
schedule.every().day.at("07:30").do(morning_task)

# 每周五下午 16:00 的任务
schedule.every().friday.at("16:00").do(friday_task)

while True:
    schedule.run_pending()
    time.sleep(1)

实用建议和常见错误

使用 schedule 自动化任务时,有一些点需要注意。

首先,记住 schedule 在主线程中运行。这意味着如果你的任务耗时较长,或者可能阻塞其他任务运行,建议使用多线程或异步调用。

其次,如果任务必须在严格的时间运行,请确保你的设备是开着的,脚本正在运行。如果脚本停止或者设备关机,schedule 不会工作

最后一个常见误解是预期 schedule 能补上错过的任务。遗憾的是,如果任务在预定时间未运行,schedule 不会补偿这些错过的任务。

1
Опрос
日期和时间的操作,  39 уровень,  4 лекция
недоступен
日期和时间的操作
日期和时间的操作
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION