带线程的Python MP3Play

带线程的Python MP3Play,python,multithreading,Python,Multithreading,我正在尝试用python创建一个MP3Player(不使用任何花哨的GUI,只使用基本的命令行)。您可以输入诸如“playlist”(打印所有歌曲)或“play[num]”之类的命令,在播放列表中播放指定的歌曲。我可以在一个线程中完成这一切,但我想要的是创建另一个线程,以便您可以在播放实际音乐时执行更多命令,如“添加歌曲”或“删除歌曲”(而不是命令行等待音乐结束)。以下是我的一个线程: import mp3play, time clip = mp3play.load(song) clip.pla

我正在尝试用python创建一个MP3Player(不使用任何花哨的GUI,只使用基本的命令行)。您可以输入诸如“playlist”(打印所有歌曲)或“play[num]”之类的命令,在播放列表中播放指定的歌曲。我可以在一个线程中完成这一切,但我想要的是创建另一个线程,以便您可以在播放实际音乐时执行更多命令,如“添加歌曲”或“删除歌曲”(而不是命令行等待音乐结束)。以下是我的一个线程:

import mp3play, time
clip = mp3play.load(song)
clip.play()
time.sleep(clip.seconds()) #Waits the duration of the song
clip.stop()
#Command line asks for input after this
这一切都很好,但当我尝试实现线程化时,如下所示:

import mp3play, time

def play(songname):
    clip = mp3play.load(song)
    clip.play()
    time.sleep(clip.seconds()) #Waits the duration of the song
    clip.stop()

#Get user input here
#Check if user inputted command
#User inputed "play"
thread.start_new_thread(play,("some_random_song.mp3",))
它出故障了。这一切似乎都很好,直到你在歌曲播放到一半时关闭应用程序,音乐仍然在运行。要停止音乐,我必须打开任务管理器并结束任务。所以我也考虑使用一个“stop”命令,它不会关闭线程,但会使用

clip.stop()
我不知道如果你试图停止一个没有运行的剪辑会发生什么,所以我实现了一个预防系统(布尔运行,检查它是否运行)。但现在一切都不起作用,到目前为止,我的代码如下:

def play(filename):
    global clip
    clip.play()
    time.sleep(clip.seconds())
    clip.stop()

playing = False
clip = ""

#Get user input
#blah blah blah command stuff
#User inputted "play"
thread.start_new_thread(play,("some_random_song.mp3",))
playing = True
#Goes back to command line
#User inputted 'stop' this time
if playing:
    clip.stop()
    playing = False

但是当我尝试运行这个程序时,线程中会出现clip.play(),但不会启动它。我不知道我如何才能绕过这一点,如果有可能做到这一点没有线程。提前感谢。

最好使用不同的进程播放MP3,使用
多处理。进程

编写一个函数,获取MP3文件的路径,并将其作为
进程启动

出于技术原因,主要的python实现(来自python.org)限制线程,以便一次只能有一个线程执行python字节码。这可能永远不会无故障。

当我键入“播放”时,它开始播放音乐,但它不会显示指针“>”以请求下一个命令(即,线程被捆绑
sleep
ing,用于mp3play
剪辑
)。我做错什么了吗?