3
這是工作程序(我能聽到在行動文本到語音):範圍規則和線程
import pyttsx
import threading
def saythread(location, text):
engine = pyttsx.init()
engine.say(text)
engine.runAndWait()
e = (1, "please work, oh my god")
t = threading.Thread(target=saythread,args=e,name='sayitthread')
t.start()
如果程序改爲
import pyttsx
import threading
def saythread(location, text):
global engine #(CHANGED) ADDED GLOBAL
engine.say(text)
engine.runAndWait()
e = (1, "please work, oh my god")
engine = pyttsx.init() #(CHANGED) ADDED VARIABLE
t = threading.Thread(target=saythread,args=e,name='sayitthread')
t.start()
然後獲取'卡住'在行「engine.runAndWait()」,文本到語音不起作用。我猜測問題在於線程範圍的規則。對? 基本上我想要的是..在我的主線程中引擎變量的'句柄'。所以我可以從主線程調用engine.stop()。
希望我是有道理的
感謝
謝謝你的時間。我試圖將引擎作爲參數傳遞,但沒有奏效。使用鎖定不起作用。但最後使用一個內部函數調用engine.stop()並使用隊列告訴內部函數何時停止,終於解決了我的問題!非常感謝!! –
@ user161179 - 很高興聽到它!如果您只是爲了觸發單個事件而使用隊列,則可以使用['Condition]](http://docs.python.org/library/threading.html#condition-objects)或['事件'](http://docs.python.org/library/threading.html#event-objects)對象。 – detly