schedule 定时运行 Python 函数

发布时间 2023-12-20 13:46:35作者: 乐乐乐乐乐乐樂

安装

pip install schedule

例子

每x分钟运行一次
import schedule
import time

def job():
    print("I'm working...")

# 每 3 秒/分钟/小时/天/周运行一次任务、
# 从现在开始每 3 秒/分钟/小时/天/周运行一次作业
schedule.every(3).seconds.do(job)
schedule.every(3).minutes.do(job)
schedule.every(3).hours.do(job)
schedule.every(3).days.do(job)
schedule.every(3).weeks.do(job)

# 每分钟在第 23 秒运行任务
schedule.every().minute.at(":23").do(job)

# 每小时第42分钟运行
schedule.every().hour.at(":42").do(job)

# 每隔 5 小时 20 分 30 秒执行一次任务。
# 如果当前时间是 02:00,则第一次执行时间为 06:20:30
schedule.every(5).hours.at("20:30").do(job)

#每天在指定的 HH:MM 和下一个 HH:MM:SS 运行任务
schedule.every().day.at("10:30").do(job)
schedule.every().day.at("10:30:42").do(job)
schedule.every().day.at("12:42", "Europe/Amsterdam").do(job)

# 在一周的某一天运行任务
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().minute.at(":17").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)
    
 #这调用了一个名为schedule的对象的run_pending方法。这个方法通常用于检查并执行任何待处理的计划任务。具体的行为取决于schedule对象的实现,但通常它会查看当前时间与任务计划时间的差异,并决定是否现在应该运行该任务
使用装饰器执行任务

使用@repeat来安排函数。使用与上面相同的语法传递一个间隔,同时省略.do().

from schedule import every, repeat, run_pending
import time

@repeat(every(10).minutes)
def job():
    print("I am a scheduled job")

while True:
    run_pending()
    time.sleep(1)
参数传递给任务
import schedule

def greet(name):
    print('Hello', name)

schedule.every(2).seconds.do(greet, name='Alice')
schedule.every(4).seconds.do(greet, name='Bob')

from schedule import every, repeat

@repeat(every().second, "World")
@repeat(every().day, "Mars")
def hello(planet):
    print("Hello", planet)
取消任务
import schedule

def some_task():
    print('Hello world')

job = schedule.every().day.at('22:30').do(some_task)
schedule.cancel_job(job)