Потоки и условия - PullRequest
       11

Потоки и условия

3 голосов
/ 25 июня 2011

Я новичок в потоках и не очень понимаю, как использовать условия. На данный момент у меня есть класс потока, подобный этому:

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 ]

3 голосов
/ 26 июня 2011

Здесь есть гораздо более простое решение.Вы используете библиотеку Audiere, которая уже воспроизводит аудио в своем собственном потоке.Следовательно, нет необходимости создавать второй поток для воспроизведения аудио.Вместо этого используйте Audiere непосредственно из основного потока и остановите его из основного потока.

2 голосов
/ 26 июня 2011

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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...