Остановка потока 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()
→ Ссылка