Python周期任务神器之Schedule模块使用详解
简介
Schedule是一个Python的定时任务库,可用于周期性地运行函数。它包含了简单的API,使得我们可以编写出精确的任务调度程序。Schedule模块基于时间的概念,从而可以在指定的时间执行一些任务,例如:定时监测网站可用性、定时发送邮件、定时运行爬虫等等。
安装
pip install schedule
基本用法
1. 执行一次任务
schedule
模块的run_pending()
函数会根据任务计划表(默认每30秒检查一次)执行等待执行的任务。
import schedule
import time
def job():
print("I'm working...")
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
在上述代码中,我们定义了一个名为“job”的任务,并使用schedule.every(10).seconds.do(job)
将其加入计划表中。代码最后进入一个循环,循环中不断运行schedule.run_pending()
。
每隔10秒,"I'm working..."会被打印出来。
2. 指定日期和时间
可以使用schedule.every().day.at()
方法指定任务执行的日期和时间,以此保证任务按照预定的时间执行。
import schedule
import time
def job():
print("I'm working...")
schedule.every().day.at("10:30").do(job) # 每天10点30分执行任务
while True:
schedule.run_pending()
time.sleep(1)
在上述代码中,我们使用every().day.at()
方法指定了任务在每天10点30分执行。运行代码后,在指定时间里,“I'm working...”会被打印出来。
3. 取消任务
我们可以通过调用任务的cancel()
方法来取消一个未执行的任务。
import schedule
import time
def job():
print("I'm working...")
task = schedule.every(10).seconds.do(job)
while True:
task.cancel() # 取消任务
schedule.run_pending()
time.sleep(1)
在上述代码中,我们将task变量初始化为任务调度器,并通过其cancel()
方法取消了任务。如此,任务就不会被执行了。
核心API
every(interval).unit.do(job)
我们使用every()
函数来指定任务的间隔以及时间单位。例如:every(10).seconds
表示指定任务每10秒执行一次。
调用unit
方法可以指定时间单位,可选的时间单位有:weeks
、days
、hours
、minutes
和seconds
。
do()
方法用于指定待调用的函数。
run_pending()
该方法检查任务计划表,执行等待执行的任务。
run_all()
该方法强制调度器立即运行事件。
clear(tag=None)
该方法可清除任务页面上的所有计划任务。
cancel_job(job)
该方法可将特定的任务从待办事项列表中删除。
示例
示例一:每到整点提醒一下
import datetime
import schedule
import time
def remind():
print("It's time!")
schedule.every().hour.at(":00").do(remind)
while True:
schedule.run_pending()
time.sleep(1)
在上述代码中,我们在every().hour.at()
方法中指定了每小时的整点时执行remind()
函数。然后,我们通过while
循环和schedule.run_pending()
函数不断执行等待执行的任务。
示例二:周一至周五每天晚上8点播报天气
import schedule
import time
def remind():
# 这里是播报天气的逻辑
pass
schedule.every().week.day.at("20:00").do(remind)
while True:
schedule.run_pending()
time.sleep(1)
在上述示例中,我们将特定于工作日晚上8点的“星期几”指定为每周的时间单位(即every().week.day
),并将播报天气的逻辑指定为待执行的函数。调用schedule.run_pending()
在指定时间里播报天气。
注意:
-
本文档代码示例仅供参考,生产代码请不要在
while True
循环中运行。 -
schedule
模块虽然精简,但在高并发且复杂的场景下可能会出现一些潜在的问题。在使用该模块时,需要对其进行一定程度的测试以验证其可靠性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python周期任务神器之Schedule模块使用详解 - Python技术站