侧边栏壁纸
博主头像
张种恩博主等级

一个能运维的 JPG 搬运工

  • 累计撰写 694 篇文章
  • 累计创建 58 个标签
  • 累计收到 17 条评论

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

张种恩
2021-06-08 / 0 评论 / 0 点赞 / 129 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-06-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

死循环

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

评论区