我从一个线程调用一个函数,一旦函数开始运行,两个线程都会停止工作,直到函数执行完毕,并且在函数执行后程序才会停止。
class listen(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.playmusicobject = playmusic()
self.objectspeak = speak()
self.apiobject = googleAPI()
def listening(self):
self.r = sr.Recognizer()
threadLock.acquire()
try:
with sr.Microphone() as source:
print("say something")
self.audio = self.r.listen(source)
finally:
threadLock.release()
def checkingaudio(self):
threadLock.acquire()
try:
# a = str(self.r.recognize_google(self.audio))
a = str(self.r.recognize_google(self.audio))
print(a)
if a in greetings:
self.objectspeak.speaking("I am good how are you?")
if a in music:
print("playing music")
self.playmusicobject.play()
if a in stop:
print("stopping")
self.playmusicobject.b()
if a in api:
self.apiobject.distance()
finally:
threadLock.release()
class playmusic:
def play(self):
playsound.playsound("playthisfile")
if __name__ == "__main__":
while 1:
d = listen()
t1 = threading.Thread(target=d.listening)
t1.start()
t2 = threading.Thread(target=d.checkingaudio)
t2.start()
每当我在playmusic中调用play函数时,两个线程都会停止,并且在play函数执行后程序停止。无论如何,函数播放或事实上运行函数CheckingAudio的线程调用的任何其他函数都不会停止2个原始线程。我尝试将play函数作为它自己的线程运行但是不成功这样做,它只是给了我一个错误,说无法启动线程t3,方式是作为一个线程调用该函数(这可能是错误的)
if a in music:
print("playing music")
t3 = threading.Thread(target=self.playmusicobject.play)
t3.start()
我尝试在playmusic类中创建一个runplaythread函数,但仍然给我错误无法启动线程。
答案 0 :(得分:0)
不确定它是否会解决您的问题,但您的上一个帖子的目标是错误的,您使用select * from data_1d where and open_close>20
代替self
来调用d
的实例。
这是您的代码已更正以替换上下文:
listen
注意:评论可能没问题,但代表不够。
编辑:现在明确提到重用OP的代码用于上下文。 (虽然这很明显)
EDIT2:你在哪里调用你的第三个帖子并不清楚,但似乎没有问题,请看评论。