如何让Python不等待命令结束?
How to make Python not to wait for the end of the command?
我正在制作语音助手,当我说“设置闹钟”时程序冻结并等待闹钟设置的时间。所以在闹钟响之前我不能和助手通话。
这是代码
if 'alarm' in said:
engine.say('Set')
engine.runAndWait()
now = datetime.datetime.now()
alarm_time = datetime.datetime.combine(now.date(), datetime.time(int(said)))
time.sleep((alarm_time - now).total_seconds())
os.system("start alarm.mp3")
如何忽略它或对程序做一些事情使其不会冻结?也许还有其他设置闹钟的方法?
帮助将不胜感激!
您可以创建一个 thread,它将 sleep
持续指定的时间。休眠线程不会阻塞主线程,因此它会继续执行。
import threading, time, os
def thread_func(seconds):
time.sleep(seconds)
os.system("start alarm.mp3")
threading.Thread(
target=thread_func,
args=((alarm_time - now).total_seconds(), ),
daemon=True
).start()
# Do something else here
os.system
将阻止执行,但应该相当快。
我正在制作语音助手,当我说“设置闹钟”时程序冻结并等待闹钟设置的时间。所以在闹钟响之前我不能和助手通话。
这是代码
if 'alarm' in said:
engine.say('Set')
engine.runAndWait()
now = datetime.datetime.now()
alarm_time = datetime.datetime.combine(now.date(), datetime.time(int(said)))
time.sleep((alarm_time - now).total_seconds())
os.system("start alarm.mp3")
如何忽略它或对程序做一些事情使其不会冻结?也许还有其他设置闹钟的方法?
帮助将不胜感激!
您可以创建一个 thread,它将 sleep
持续指定的时间。休眠线程不会阻塞主线程,因此它会继续执行。
import threading, time, os
def thread_func(seconds):
time.sleep(seconds)
os.system("start alarm.mp3")
threading.Thread(
target=thread_func,
args=((alarm_time - now).total_seconds(), ),
daemon=True
).start()
# Do something else here
os.system
将阻止执行,但应该相当快。