1

我正在尝试使用线程将阻塞调用包装在 pyaudio 中,以使我能够通过队列进行非阻塞访问。但是,我遇到的问题不在于 pyaudio 或队列,而在于尝试测试线程的问题。为了与“尽可能少地剥离示例”保持一致,所有 pyaudio 的东西都消失了,只留下线程类及其在 main.c 中的实例化。

我希望的是一个我可以创建的对象,然后在后台继续处理它的东西,而我用控制台或 tk 来控制东西。我认为下面的 max-stripped 示例应该让线程做一些事情,而 main 运行并询问我它是否工作。raw_input 提示永远不会出现。如果我从 IDLE 运行它,我不会对此感到惊讶,这不是线程安全的,但如果我直接从操作系统运行脚本,我会得到相同的行为。我准备看到原始输入提示消失在“运行”打印推动的屏幕上,但即使这样也没有发生。提示永远不会出现。这是怎么回事?它确实响应 ctrl-C 并关闭窗口,但我仍然希望能够看到 main 运行。

import threading
import time

class TestThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.running=True
        self.run()

    def run(self):        
        while self.running:
            time.sleep(0.5)
            print 'running'                            

    def stop(self):
        self.running=False

if __name__=='__main__':

    tt=TestThread()
    a=raw_input('simple stuff working ? -- ')
    tt.stop()
4

2 回答 2

2

您应该使用 self.start() 而不是 self.run() 来启动线程。在这种情况下,您只是像运行任何其他普通函数一样运行线程函数。

于 2012-11-04T22:10:02.133 回答
-1

通常你不会从 Thread 继承。相反,您使用Thread(target=func2run).start()

于 2012-11-04T22:13:57.823 回答