在后台等待时间后执行代码(Python)

时间:2018-01-20 20:28:25

标签: python multithreading time

我正在制作像Google智能助理或Siri这样的私人助理,我希望用户能够设置提醒。例如,如果他们输入“提醒我在下午5点洗碗”,我希望它稍后会弹出并提醒他们。但是我也希望代码能够在等待时运行,因此您可以设置多个提醒或检查天气。

time.sleep只是停止程序。我很确定有一种方法可以用线程来做,但我不确定如何。请帮忙!

1 个答案:

答案 0 :(得分:0)

Python线程的Timer完全符合您的要求:

from datetime import datetime
from threading import Timer

def create_notification(time, name):
    delay = (time - datetime.now()).total_seconds()
    Timer(delay, show_notification, args=[name]).start()

def show_notification(name):
    print(f'notification: {name}!')

create_notification(datetime(2034, 1, 1), 'Hello future!')

需要注意的一点是,这种方法为每个事件创建了一个单独的线程(对于许多事件而言,这种线程无法很好地扩展)。这也会遇到这样的问题:如果用户关闭程序,程序崩溃,计算机关机,断电等,您将丢失所有通知。如果需要处理此问题,请将它们保存到文件中。如果您需要在程序未运行时显示通知,请查看操作系统提供的解决方案,如cronjobs