sched调度器,定期执行任务

用法:

import sched
import time

#指定调度器 第一个参数获取当前时间,第二个参数用time.sleep阻塞程序
scheduler = sched.scheduler(time.time, time.sleep)  #创建调度器
scheduler.enter(10, 1, run_task)  #像调度器添加任务,参数:时间,优先级,被执行任务函数
scheduler.run()  #启动调度器

需要注意的是,这个只是一次性的,要重复执行的时候要,要考虑在被执行的程序里再指定下次启动的时间,然后再启动调度器:

scheduler.enter(10, 1, run_task)  #继续指定调度器运行时间和被运行程序

定期执行的示范:

import sched
import time

# 创建一个调度器
scheduler = sched.scheduler(time.time, time.sleep)

# 设置初始的定时任务
scheduler.enter(10, 1, run_task)

# 定义要执行的任务函数
def renwu():
    print("执行任务")
    
# 定义一个定时任务,每隔20秒执行一次
def run_task():
    scheduler.enter(20, 1, run_task)  #再继续指定下次时间
    renwu()  #调用被执行的函数
    
# 启动调度器
scheduler.run()

指定时间执行:

import sched  #调度器
import time  #时间
import datetime #日期模块

scheduler = sched.scheduler(time.time, time.sleep) #指定调度器

def renwu():
    print("执行任务")

def run_task():
    now = datetime.datetime.now()  #当前时间和日期
    # 每天的13点20分+1天,也就是定到第二天的13点20分
    next_time = now.replace(hour=13, minute=20, second=0, microsecond=0) + datetime.timedelta(days=1)
    delta = (next_time - now).total_seconds()  #计算剩余时间
    scheduler.enter(delta, 2, run_task)  #添加新的定时任务到调度器
    scheduler.enter(delta, 1, renwu)  #添加被执行任务到调度器

run_task() #执行一次定时程序
#结尾启动调度器,会将run_task()内添加的两个任务等待运行
scheduler.run()