我想基于python模块" mp3play"制作一个小命令行音乐播放器。 我想定期检查一首歌是否已停止播放(并最终开始播放新歌),但用户应能在此期间输入新命令(如暂停音乐)。 因此我尝试使用threading.Timer。但是,如果我在使用计时器调用的函数内部,它会给我一个错误。正常调用函数时不会发生错误。继承了我的(简化)代码:
from threading import Timer
global currentmusic
def rep():
b = currentmusic.isplaying() #this is where the error occurs
if b:
print "Music is playing"
else:
print "Music has stopped"
t=Timer(5.0,rep) #repeat every 5 seconds
t.start()
currentmusic=playrandomfile() #loads a song and starts playing it
rep() #call the first time
当第二次调用rep()时,它在函数isplaying()中给出了一个MCI错误,说它无法读取设备。我的问题:
我是否在使用threading.Timer的方式犯了错误? (我该如何解决?)
还有另一种方式而不是线程。定时器来实现我想要的东西吗?
到目前为止我的想法是,从另一个线程访问currentmusic
可能是一个问题,但我不确定。我也不知道如何避免它
感谢帮助
答案 0 :(得分:0)
我在某些项目中使用过mp3play,它对我来说很好用。 IMO递归线程是问题所在。 只需删除线程计时器并保留rep函数调用,它就不会滞后任何pc。 您应该仅对raw_input使用线程。