带线程的交互式脚本

时间:2012-11-04 22:07:46

标签: python multithreading

我正在尝试用pytrio在一个线程中包含阻塞调用,以便通过队列进行非阻塞访问。但是,我遇到的问题不是pyaudio或队列,而是尝试测试线程的问题。为了保持“将示例剥离到最小可能”,所有pyaudio的东西都消失了,只留下线程类,并在main中实例化。

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

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()

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

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