侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Python 中简单实现定时任务的几种方式

zze
zze
2021-06-08 / 0 评论 / 0 点赞 / 172 阅读 / 1857 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

死循环

from datetime import datetime
import time

if __name__ == "__main__":
    interval = 5
    while True:
        print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
        time.sleep(interval)

Timer 定时器

from datetime import datetime
from threading import Timer


def print_time(interval):
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    # 递归执行,在 interval 秒后执行 print_time 函数
    t = Timer(interval, print_time, (interval,))
    t.start()


if __name__ == "__main__":
    interval = 5
    print_time(interval)

schedule 调度

import sched
import time
from datetime import datetime

# 初始化 sched 模块的 scheduler 类
# 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
schedule = sched.scheduler(time.time, time.sleep)


# 被周期性调度触发的函数
def print_time(interval):
    print("print_time:\t", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    # 递归调用 print_time
    schedule.enter(interval, 0, print_time, (interval,))


def say_hello(interval):
    print("hello:\t", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    # 递归调用 print_time
    schedule.enter(interval, 0, say_hello, (interval,))


if __name__ == "__main__":
    # 执行间隔
    interval = 10
    print("begin:\t", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    # enter 函数的四个参数分别为:
    #   间隔时间
    #   优先级(用于同时间到达的两个事件同时执行时定序)
    #   被调用触发的函数句柄
    #   给该触发函数的参数(tuple 形式)
    # 首次执行在 5 秒后,传入 interval 参数执行 print_time 函数
    schedule.enter(5, 0, print_time, (interval,))
    # 首次执行在 5 秒后,传入 interval 参数执行 say_hello 函数
    schedule.enter(3, 0, say_hello, (interval,))
    schedule.run()
0

评论区