在Python中同时运行两个函数

在Python中同时运行两个函数,python,multithreading,Python,Multithreading,我试着做一个机器人,它可以和你说话,可以做一些特殊的事情,比如定时器。我希望计时器可以运行,而用户可以输入更多的问题或东西来与机器人交谈。 但现在,当通过执行threading.Timer(time\u wait,Timer\u end).start()将“Timer\u end”作为新线程激活时,会播放winsound.Beep(800250)声音,但“Speak”(“ALERT!”)不会激活 import os import time import threading import wins

我试着做一个机器人,它可以和你说话,可以做一些特殊的事情,比如定时器。我希望计时器可以运行,而用户可以输入更多的问题或东西来与机器人交谈。 但现在,当通过执行threading.Timer(time\u wait,Timer\u end).start()将“Timer\u end”作为新线程激活时,会播放winsound.Beep(800250)声音,但“Speak”(“ALERT!”)不会激活

import os
import time
import threading
import winsound

ki_speak="yes"
user_speak="yes"
time_wait=0
text=""
user=""

def Timer_start():
    Speak("Timer settings:")
    Speak("Seconds:")
    seconds=int(input())
    Speak("Minutes:")
    minutes=int(input())
    Speak("Hours:")
    hours=int(input())
    global time_wait
    time_wait=0
    while seconds!=0:
        time_wait+=1
        seconds-=1
    while minutes!=0:
        time_wait+=60
        minutes-=1
    while hours!=0:
        time_wait+=3600
        hours-=1
    threading.Timer(time_wait, Timer_end).start()

def Timer_end():
    winsound.Beep(800,250)
    winsound.Beep(600,250)
    Speak("ALERT!")

def Speak(text):
    print(text)
    if user_speak=="Yes" or user_speak=="yes":
        global user
        SpeakFile = open("User_Speak.vbs","w")
        SpeakFile.write('textvbs = ("')
        SpeakFile.write(str(user))
        SpeakFile.write('")\nset objvoice = createobject ("SAPI.spvoice")\nobjvoice.speak textvbs')
        SpeakFile.close()
        os.system("User_Speak.vbs")
        user=""
    if ki_speak=="Yes" or ki_speak=="yes":
        SpeakFile = open("Ki_Speak.vbs","w")
        SpeakFile.write('textvbs = ("')
        SpeakFile.write(str(text))
        SpeakFile.write('")\nset objvoice = createobject ("SAPI.spvoice")\nobjvoice.speak textvbs')
        SpeakFile.close()
        os.system("Ki_Speak.vbs")
        text=""

def main():
    if user=="b":
        CRASH
    elif user=="hello":
        Speak("Hey")
    elif user=="t":
        Timer_start()

while True:
    user=str(input())
    main()

在循环中使用
msvcrt.getch()
在循环中逐个获取输入字符并在运行时测试计时器可能会更容易。那么就不需要线程了。然后这个x2