CodeGym /Java 课程 /Python SELF ZH /设置重复任务(每日和每周提醒)

设置重复任务(每日和每周提醒)

Python SELF ZH
第 40 级 , 课程 0
可用

1. 设置简单任务

让我们从一个最简单的例子开始:让代码每天提醒我们检查邮箱。

Python

import schedule
import time

def job():
    print("提醒:检查你的邮箱!")

# 设置每天的任务
schedule.every().day.at("09:00").do(job)

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

在这个例子中,函数 job 将在每天早上 9 点执行。schedule 库每秒通过 run_pending() 检查是否有计划任务。记住,你的代码需要一直运行,这样任务才能被执行。

给酷炫黑客的提示

请注意,你可以使用 every().hour 每小时运行任务,或者 every(2).hours 每两小时运行任务。功能几乎是无限的。

2. 工作日提醒

现在让我们复杂一点:假设你只需要在工作日收到提醒。例如,每个工作日我们想收到相同的提醒。

Python

import schedule
import time

def weekday_job():
    print("工作提醒:别忘了准备报告!")

schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)

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

在这个例子中,每个工作日早上 8 点,你会收到准备报告的提醒。这样即便你忘记了,脚本也会帮你跟踪时间表。

3. 设置每周任务

如果你想每周收到提醒,比如每周日检查咖啡存量以备工作周,那该怎么办?让我们看看该如何实现:

Python

import schedule
import time

def sunday_job():
    print("提醒:检查下周的咖啡存量!")

schedule.every().sunday.at("18:00").do(sunday_job)

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

这一小段代码会让你的周日更有条理,提醒你为下周做好准备。这样你的咖啡就永远不会在意外的时刻喝完。我知道,对很多人来说这可能是个灾难。

4. 修改任务

从计划中删除任务

如果需要取消任务,可以使用 cancel_job() 方法。例如,为了从计划中删除任务,你可以获取任务对象并调用 cancel_job()

Python

job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job)  # 从计划中删除任务

更改任务时间

为了修改任务的执行时间,可以重新设置计划。例如,如果任务原来是安排在 9:00,但现在需要改为 10:00,可以重新安排它的时间表。

Python

# 计划每天在 9:00 执行任务
job = schedule.every().day.at("09:00").do(my_task)

# 更改任务到 10:00
job.clear()  # 清除当前任务的时间表
job.at("10:00")  # 设置新时间

检查活动中的任务

为了查看有哪些任务在计划中,可以通过 schedule.jobs 列出所有活动任务。这在你需要了解计划中所有任务时很有用。

Python

# 添加几个任务
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)

# 查看所有活动中的任务
for job in schedule.jobs:
    print("任务:", job)

删除计划中的所有任务

如果需要清空计划并删除所有任务,可以使用 clear() 方法。

Python

# 计划几个任务
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)

# 清空计划
schedule.clear()

只执行一次的任务

有时候只需要执行一次任务。在这种情况下,可以用 schedule.cancel_job(job) 在任务执行后取消它。

Python

def one_time_task():
    print("任务已执行一次")
    return schedule.CancelJob  # 执行后取消任务

# 计划任务只执行一次
schedule.every().day.at("09:00").do(one_time_task)

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

5. 实际使用场景

现在让我们更认真一些:类似的自动化如何在专业环境中使用?在实际工作中,你可以用任务计划来:

  • 每天或每周自动收集数据。
  • 在特定时间生成并发送报告。
  • 监控服务器或网页状态并发送错误通知。
  • 定期备份数据库。

常见错误

在设置任务计划时要注意时间不同步的问题,例如,如果你的服务器和本地电脑时区不同。此外,如果你的脚本意外崩溃,计划中的任务就不会被执行。使用像 cron(适用于类 Unix 系统)或者 Windows Task Scheduler 的工具进行监控。

如果你意外忘记在循环末尾加入 time.sleep(1),你就会得到一个无限占用 CPU 的进程,像个过于兴奋的代码一样。所以,记得让脚本正常运行。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION