如何使用Python实现指定时间点触发的多提醒设置功能
Python指定时间点提醒功能实现方案
核心实现思路
需要解决两个核心问题:第一是从自然语言输入中解析出目标时间和提醒内容,第二是实现多任务的定时调度,到点触发提醒。
依赖安装
用到两个第三方库,直接用pip安装即可:
- 时间解析用
dateparser:支持自动识别中文的「下午2点」「明天3点」这类自然语言时间 - 多定时任务调度用
schedule:比手动写循环判断时间更稳定,支持多任务并行
pip install dateparser schedule
完整实现代码
import dateparser import schedule import time from datetime import datetime # 存储所有提醒任务的唯一标识,避免重复添加 reminder_ids = set() def trigger_reminder(content): """触发提醒的回调函数""" print(f"\n⏰ 提醒时间到:{content}") # 可在此处替换为弹窗、声音提醒等其他触发方式 def add_reminder(input_str): """从自然语言输入解析并添加提醒""" # 解析输入中的时间 parsed_time = dateparser.parse(input_str, languages=['zh']) if not parsed_time: print("❌ 无法识别输入的时间,请调整表述后重试") return # 校验时间是否为未来时间 now = datetime.now() if parsed_time < now: print("❌ 输入的时间已经过去,请设置未来的时间") return # 提取提醒内容,可根据自己的需求优化拆分规则 time_mark = parsed_time.strftime("%p%H点").replace("AM","上午").replace("PM","下午") content = input_str.split(time_mark)[-1].strip() if time_mark in input_str else input_str if not content: content = "无备注提醒" # 生成任务唯一id,避免重复添加 task_id = f"{parsed_time.timestamp()}_{content}" if task_id in reminder_ids: print(f"⚠️ 已存在相同的提醒:{parsed_time.strftime('%Y-%m-%d %H:%M:%S')} {content}") return # 定义一次性任务,执行后自动销毁 def one_time_job(): trigger_reminder(content) reminder_ids.remove(task_id) return schedule.CancelJob # 计算延迟时间加入调度 delay = (parsed_time - now).total_seconds() schedule.every(delay).seconds.do(one_time_job) reminder_ids.add(task_id) print(f"✅ 提醒设置成功:{parsed_time.strftime('%Y-%m-%d %H:%M:%S')} {content}") if __name__ == "__main__": print("提醒设置工具,输入示例:下午2点记得倒垃圾,输入exit退出") # 单独线程处理用户输入,避免阻塞调度循环 import threading def input_loop(): while True: user_input = input("\n请输入提醒内容:") if user_input.lower() == "exit": print("程序退出") exit(0) add_reminder(user_input) threading.Thread(target=input_loop, daemon=True).start() # 主循环运行调度器 while True: schedule.run_pending() time.sleep(1)
功能说明
- 支持中文自然语言时间识别:可识别「下午2点」「明天上午9点半」「下周五18点」等常用时间表述
- 支持多提醒同时设置:schedule库自动管理所有定时任务,无需手动维护多个时间判断
- 一次性提醒:触发后自动删除任务,不会重复执行
- 可根据需求修改
trigger_reminder函数,实现系统弹窗、播放提示音、发送通知等更多提醒方式
内容的提问来源于stack exchange,提问作者Alex Park
相关产品推荐
相关产品推荐

