线程和条件

时间:2011-06-25 19:49:34

标签: python multithreading conditional-statements

我是线程新手,我真的不懂如何使用条件。目前,我有一个这样的线程类:

class MusicThread(threading.Thread):
    def __init__(self, song):
        threading.Thread.__init__(self)
        self.song = song
    def run(self):
        self.output = audiere.open_device()
        self.music = self.output.open_file(self.song, 1)
        self.music.play()
        #i want the thread to wait indefinitely at this point until
        #a condition/flag in the main thread is met/activated

在主线程中,相关代码是:

music = MusicThread(thesong)
music.start()

这应该意味着我可以通过辅助线程播放一首歌,直到我在主线程中发出命令来阻止它。我猜我必须使用锁和wait()或什么?

2 个答案:

答案 0 :(得分:3)

这里有一个更简单的解决方案。您正在使用Audiere库,它已经在自己的线程中播放音频。因此,不需要为了播放音频而产生自己的第二个线程。相反,直接从主线程使用Audiere,并从主线程中停止它。

答案 1 :(得分:2)

Matt Campbell的回答可能是正确的。但也许您想要出于其他原因使用线程。如果是这样,您可能会发现Queue.Queue非常有用:

>>> import threading
>>> import Queue
>>> def queue_getter(input_queue):
...     command = input_queue.get()
...     while command != 'quit':
...         print command
...         command = input_queue.get()
... 
>>> input_queue = Queue.Queue()
>>> command_thread = threading.Thread(target=queue_getter, args=(input_queue,))
>>> command_thread.start()
>>> input_queue.put('play')
>>> play
input_queue.put('pause')
pause
>>> input_queue.put('quit')
>>> command_thread.join()

command_thread对队列执行阻塞读取,等待将命令放入队列。它会在接收到队列时继续读取和打印命令,直到发出'quit'命令。