Python 函数不';t在线程中第二次调用它时工作(Pyttsx模块)

Python 函数不';t在线程中第二次调用它时工作(Pyttsx模块),python,Python,编辑:大大减少了代码 在Python2.7、windows xp上 这是一个小程序,它使用Pyttsx模块进行一些文本到语音的转换 工作: 讲一个特定的文本字符串。将创建一个新线程(runNewThread())来处理讲的部分 为了停止对话,我使用了一个队列与新线程通信,从而停止Pyttsx引擎 这一切都按预期进行。但是,在停止对话线程并创建新线程之后,由于某种原因,引擎根本不说话(在第二个新线程内)。线程函数被正确调用,engine=Pyttsx.init()的变量类型正确,其他语句执行正确,

编辑:大大减少了代码

在Python2.7、windows xp上

这是一个小程序,它使用Pyttsx模块进行一些文本到语音的转换

工作: 讲一个特定的文本字符串。将创建一个新线程(runNewThread())来处理讲的部分

为了停止对话,我使用了一个队列与新线程通信,从而停止Pyttsx引擎

这一切都按预期进行。但是,在停止对话线程并创建新线程之后,由于某种原因,引擎根本不说话(在第二个新线程内)。线程函数被正确调用,
engine=Pyttsx.init()
的变量类型正确,其他语句执行正确,只有
engine.runAndWait()
不起作用。为什么?

编辑:它现在还在线程sayitthread中抛出异常
异常(很可能在解释器关闭时引发):

编辑: 这是我的调试器在创建运行第二个线程之前所说的

t   Thread: <Thread(Thread-4, stopped 1328)>    
    _Thread__block  _Condition: <Condition(<thread.lock object at 0x00AD6420>, 0)>  
        _Condition__lock    lock: <thread.lock object at 0x00AD6420>    
        _Condition__waiters list: []    
            __len__ int: 0  
        _Verbose__verbose   bool: False 
    _Thread__daemonic   bool: False 
    _Thread__ident  int: 1328   
    _Thread__initialized    bool: True  
    _Thread__name   str: Thread-4   
    _Thread__started    _Event: <threading._Event object at 0x00E3FDD0> 
    _Thread__stderr file: <open file '<stderr>', mode 'w' at 0x00A650D0>    
    _Thread__stopped    bool: True  
    _Verbose__verbose   bool: False 
    additionalInfo  PyDBAdditionalThreadInfoWithCurrentFramesSupport: State:1 Stop:None Cmd: None Kill:False    
    daemon  bool: False 
    ident   int: 1328   
    name    str: Thread-4   
t线程:
_螺纹堵塞情况:
_条件锁定:
_条件服务员名单:[]
__列内:0
_详细布尔:False
_线程\uuu后台程序:False
_螺纹识别号:1328
_线程\uuuu已初始化布尔值:True
_线程名称str:Thread-4
_线程\u已启动\u事件:
_线程\uu stderr文件:
_线程停止布尔:真
_详细布尔:False
additionalInfo PyDBAdditionalThreadInfoWithCurrentFramesSupport:状态:1停止:无命令:无终止:False
后台程序布尔:False
识别号:1328
名称str:Thread-4

在我看来,即使线程不是活动的(t.isAlive()返回false),变量t仍然存在!我认为我必须去掉这个t变量。我试过了。gc.collect(),但它没有帮助。

这是我们需要考虑的很多问题,您能否将程序简化到触发错误所需的最低限度?你甚至可以在这样做的过程中找到它。完成编辑。减少了代码。谢谢agf的建议
t   Thread: <Thread(Thread-4, stopped 1328)>    
    _Thread__block  _Condition: <Condition(<thread.lock object at 0x00AD6420>, 0)>  
        _Condition__lock    lock: <thread.lock object at 0x00AD6420>    
        _Condition__waiters list: []    
            __len__ int: 0  
        _Verbose__verbose   bool: False 
    _Thread__daemonic   bool: False 
    _Thread__ident  int: 1328   
    _Thread__initialized    bool: True  
    _Thread__name   str: Thread-4   
    _Thread__started    _Event: <threading._Event object at 0x00E3FDD0> 
    _Thread__stderr file: <open file '<stderr>', mode 'w' at 0x00A650D0>    
    _Thread__stopped    bool: True  
    _Verbose__verbose   bool: False 
    additionalInfo  PyDBAdditionalThreadInfoWithCurrentFramesSupport: State:1 Stop:None Cmd: None Kill:False    
    daemon  bool: False 
    ident   int: 1328   
    name    str: Thread-4