(python)使用threading.Timer调用时的不同行为

时间:2014-07-25 22:25:00

标签: python multithreading timer mci

我想基于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可能是一个问题,但我不确定。我也不知道如何避免它 感谢帮助

1 个答案:

答案 0 :(得分:0)

我在某些项目中使用过mp3play,它对我来说很好用。 IMO递归线程是问题所在。 只需删除线程计时器并保留rep函数调用,它就不会滞后任何pc。 您应该仅对raw_input使用线程。