如何使python警报在后台运行而不使应用程序等待呢?

时间:2019-04-14 21:18:51

标签: python appjar

我正在使用appjar创建一个python应用程序,该应用程序包含一项功能,该功能可将警报设置为在特定时间/日期发出警报。但是,基于我的简单实现,在代码中调用Alarm函数时,应用程序将无限期地等待警报响起,然后再进行其他操作。

我希望能够在应用程序中浏览而不必等待警报。最好的方法是什么?

这是我的警报代码:

def setAlarm(year, month, day, hour, minute, second):

    now = datetime.datetime.now()
    date = datetime.date(year, month, day)
    time = datetime.time(hour, minute, second)
    alarmTime = datetime.datetime(year, month, day, hour, minute, second)

    while now < alarmTime:
        print("not yet")

    mixer.music.load('Alarm.wav')
    mixer.music.play(-1)

    sound = True

    while(sound):
        print("Alarm")

2 个答案:

答案 0 :(得分:0)

签出Python Timers。如果这不起作用,则您的解决方案将涉及某种多线程或多处理,以便您可以同时运行两个执行路径。

您应该可以在短时间内设置一个计时器。当计时器关闭时,请在检查您等待的条件时让其运行的代码。如果仍然不满足该条件,请让该代码触发新的计时器以等待更多时间。创建并启动计时器时,控件会立即返回您的代码,因此您可以继续执行其他操作。

答案 1 :(得分:0)

我遇到了同样的问题,然后以自己的方式解决了。

import time
from playsound import playsound
import threading
from datetime import datetime
import playsound

#taking input from user
alarmH = 3
alarmM = 10
amPm = 'am'

print("Weating for the alarm",alarmH,alarmM,amPm)
if (amPm == "pm"):
     alarmH = alarmH + 12

#Current Date Time
now = datetime.now()

#desired alarm time
later = datetime(2020,5,1,alarmH,alarmM,0)

#calculating the difference between two time
difference = (later - now)

#difference in seconds
total_sec=difference.total_seconds() 

def alarm_func():
    playsound.playsound('audio/alarm.mp3', True)

timer = threading.Timer(total_sec, alarm_func)
timer.start()