python time小技巧:定时任务(二)

文章目录

一、time是什么?

二、使用步骤

1.引入库

2.获取当前时间字符串形式

3.获取目标时间字符串

4.获取目标时间戳

5.定时任务

三、实践

1.需求

2.源代码

3.结果

4.详解

4.1 分析

4.2 用户界面(前端)

4.2.1  主窗口

4.2.2 标签和输入框

 4.2.3 设置闹钟按钮

4.3 后端(完成)

总结

前言

上篇讲到了怎么利用time.sleep()强制等待的方式,实现定时任务

上一篇:python time小技巧:定时任务(一)

本篇讲解不中断程序,就可以定时任务。

意义在于不影响正常运行的程序


一、time是什么?

time 模块是 Python 标准库中的一个模块,提供了与时间相关的功能和操作。它允许你获取当前时间、进行时间的格式化和解析、进行时间的延时等操作。


二、使用步骤

1.引入库

由于它是标准库函数,不需要下载直接调用函数。代码如下:

import time

2.获取当前时间字符串形式

接下来我们需要获取当前时间,并且修改为我们想要的格式。

方便之后修改时间。代码如下:

# 获取当前时间字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")

3.获取目标时间字符串

根据用户设定的时间,修改之前获取的当前时间作为目标时间

因字符串格式无法直接修改,所以利用重组字符串的方式修改。代码如下:

#  用户设定的时间
target_time = input("请输入时间:")

# 重组时间字符串
part1 = formatted_time[:11]
part2 = formatted_time[11 + len(target_time):]
# 将新字符串插入到指定位置
new_string = part1 + target_time + part2

4.获取目标时间戳

接着将目标时间修改为时间戳格式,方便计算等待时间。代码如下:

# 将时间字符串解析为时间元组
time_tuple = time.strptime(new_string, "%Y-%m-%d %H:%M:%S")
# 将时间元组转换为时间戳
timestamp = time.mktime(time_tuple)

5.定时任务

不断查看当前时间戳,直到当前时间戳大于等于目标时间开始任务。

强调由于时间戳变化不一样,所以时间戳不会相等

while True:
    # 当前时间戳
    current_time2 = time.time()
    if current_time2 >= timestamp:
        print("当前任务")
        break

三、实践

1.需求

写一个闹钟程序:设置闹钟时间后,时间到触发闹钟提醒弹窗

2.源代码

使用了tkinter框架实现这个功能,代码如下:

import tkinter as tk
from tkinter import messagebox
import time


def set_alarm():
    # 获取用户输入的小时和分钟
    target_time = entry_time.get()

    try:
        formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")

        # 重组时间字符串
        part1 = formatted_time[:11]
        part2 = formatted_time[11 + len(target_time):]
        # 将新字符串插入到指定位置
        new_string = part1 + target_time + part2

        # 将时间字符串解析为时间元组
        time_tuple = time.strptime(new_string, "%Y-%m-%d %H:%M:%S")
        # 将时间元组转换为时间戳
        timestamp = time.mktime(time_tuple)
        messagebox.showinfo("闹钟设置", f"闹钟将在 {target_time} 触发。")
        while True:
            # 当前时间戳
            current_time2 = time.time()
            if current_time2 >= timestamp:
                show_alarm()
                break

    except ValueError:
        messagebox.showerror("错误", "请输入有效的小时和分钟。")


def show_alarm():
    messagebox.showinfo("闹钟提醒", "闹钟时间到!")


# 创建主窗口
root = tk.Tk()
root.title("闹钟")


# 标签和输入框用于输入小时和分钟
label_time = tk.Label(root, text="时间:")
label_time.grid(row=0, column=0, padx=5, pady=5, sticky="e")

entry_time = tk.Entry(root)
entry_time.grid(row=0, column=1, padx=5, pady=5)

# 设置按钮用于触发闹钟设置
button_set_alarm = tk.Button(root, text="设置闹钟", command=set_alarm)
button_set_alarm.grid(row=2, column=0, columnspan=2, pady=10)

# 运行主循环
root.mainloop()

3.结果

功能实现步骤:运行后输入时间,再点击设置闹钟的按钮。

下面是运行后的情况:

4.详解

4.1 分析

需求是让我们设计一个闹钟

由于这次我们加了界面,我们可以分为前端和后端开发

下面开始一步步操作:

4.2 用户界面(前端)

简单的pc端界面使用tkinter开发比较方便。

本次使用tkinter开发显示界面

4.2.1  主窗口

我们开始调用python的内置库,并写入主程序。代码和效果如下:

import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("闹钟")

# 运行主循环
root.mainloop()

4.2.2 标签和输入框

接下来我们我们添加一个文本标签和输入框。

这里的文本标签展示文本给用户,提示用户这是干什么。(次要)

输入框可以将用户输入的数据存贮起来,方便之后数据处理。(核心)

代码和效果如下:

import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("闹钟")

# 标签和输入框用于输入小时和分钟
label_time = tk.Label(root, text="时间:")
label_time.grid(row=0, column=0, padx=5, pady=5, sticky="e")

entry_time = tk.Entry(root)
entry_time.grid(row=0, column=1, padx=5, pady=5)

# 运行主循环
root.mainloop()

 4.2.3 设置闹钟按钮

接下来我们添加一个按钮,按钮名称为“设置闹钟”,点击按钮告诉后端现在可以处理数据

现在还需要增加后端数据处理完数据后,前端一个反馈提示,告诉用户现在的情况是什么

这里我写了两个函数set_alarm()和show_alarm()

set_alarm()在用户输入时间后点击按钮提示信息

show_alarm()在闹钟时间到时,文本提示用户,这里你也可以播放MP4文件达到闹钟效果

代码和效果如下:

import tkinter as tk
from tkinter import messagebox
import time


def set_alarm():
    # 获取用户输入的小时和分钟
    target_time = entry_time.get()

    try:
        messagebox.showinfo("闹钟设置", f"闹钟将在 {target_time} 触发。")
    except ValueError:
        messagebox.showerror("错误", "请输入有效的小时和分钟。")


def show_alarm():
    messagebox.showinfo("闹钟提醒", "闹钟时间到!")


# 创建主窗口
root = tk.Tk()
root.title("闹钟")


# 标签和输入框用于输入小时和分钟
label_time = tk.Label(root, text="时间:")
label_time.grid(row=0, column=0, padx=5, pady=5, sticky="e")

entry_time = tk.Entry(root)
entry_time.grid(row=0, column=1, padx=5, pady=5)

# 设置按钮用于触发闹钟设置
button_set_alarm = tk.Button(root, text="设置闹钟", command=set_alarm)
button_set_alarm.grid(row=2, column=0, columnspan=2, pady=10)

# 运行主循环
root.mainloop()

 

4.3 后端(完成)

前端框架已经写完了,接下来就是后端数据处理的代码了,也就是本文主讲解。

如有疑惑请看目录第二点:使用步骤

import tkinter as tk
from tkinter import messagebox
import time


def set_alarm():
    # 获取用户输入的小时和分钟
    target_time = entry_time.get()

    try:
        formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")

        # 重组时间字符串
        part1 = formatted_time[:11]
        part2 = formatted_time[11 + len(target_time):]
        # 将新字符串插入到指定位置
        new_string = part1 + target_time + part2

        # 将时间字符串解析为时间元组
        time_tuple = time.strptime(new_string, "%Y-%m-%d %H:%M:%S")
        # 将时间元组转换为时间戳
        timestamp = time.mktime(time_tuple)
        messagebox.showinfo("闹钟设置", f"闹钟将在 {target_time} 触发。")
        while True:
            # 当前时间戳
            current_time2 = time.time()
            if current_time2 >= timestamp:
                show_alarm()
                break

    except ValueError:
        messagebox.showerror("错误", "请输入有效的小时和分钟。")


def show_alarm():
    messagebox.showinfo("闹钟提醒", "闹钟时间到!")


# 创建主窗口
root = tk.Tk()
root.title("闹钟")


# 标签和输入框用于输入小时和分钟
label_time = tk.Label(root, text="时间:")
label_time.grid(row=0, column=0, padx=5, pady=5, sticky="e")

entry_time = tk.Entry(root)
entry_time.grid(row=0, column=1, padx=5, pady=5)

# 设置按钮用于触发闹钟设置
button_set_alarm = tk.Button(root, text="设置闹钟", command=set_alarm)
button_set_alarm.grid(row=2, column=0, columnspan=2, pady=10)

# 运行主循环
root.mainloop()

总结

本文讲述程序不中断情况下,达到定时任务的效果

当然你也可以使用多线程的方式,实现这种效果

如有不足之处,欢迎大家指导

如果朋友对本文有哪些疑惑,可以在评论区或者私信联系我

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫虫仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值