Остановка потока threading (с аудио) по условию
Есть поток music - проигрывает музыку, есть поток run - просит ввести чтонить. Я хочу чтоб если ввели "r" поток music обрывался по этому условию. Я понимаю, что флажок с условием не работает. Помогите плз поправить код для такого случая.
import pygame
from threading import Event
import threading
import time
def f_music(finish: Event):
pygame.init()
pygame.mixer.music.load("kukla-poet.mp3")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
pygame.event.poll()
if finish.is_set():
print('Finish')
break
def f_run():
while True:
run = input("Vvedi deistvie")
deistvie.append(run)
print(run)
if __name__ == "__main__":
finish = Event()
deistvie = []
music = threading.Thread(target=f_music, args=(finish, ))
run = threading.Thread(target=f_run, args=())
music.start()
run.start()
while True:
if deistvie[-1] == "r":
finish.set()
break
Ответы (1 шт):
Автор решения: Кирилл Маликов
→ Ссылка
import pygame
from threading import Event, Thread
MP3 = "kukla-poet.mp3"
def f_music(event: Event) -> None:
pygame.mixer.music.load(MP3)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
if event.wait(1):
pygame.mixer.music.stop()
break
pygame.mixer.music.unload()
def f_run(event: Event) -> None:
while input("Vvedi deistvie: ") != "r":
pass
event.set()
if __name__ == "__main__":
pygame.init()
event = Event()
(music := Thread(target=f_music, args=(event,))).start()
(run := Thread(target=f_run, args=(event,))).start()
music.join()
run.join()