我是线程新手,我真的不懂如何使用条件。目前,我有一个这样的线程类:
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()或什么?
答案 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'
命令。