0
我想製作一個基於python模塊「mp3play」的小命令行音樂播放器。 我想定期檢查一首歌是否停止播放(並最終開始新歌),但用戶應該能夠在那段時間輸入新的命令(如暫停音樂)。爲此,我嘗試使用threading.Timer。但是,如果我在使用計時器調用的函數內,它會給我一個錯誤。當函數正常調用時,錯誤不會發生。我的繼承人(減少)代碼:(python)使用線程調用時的不同行爲。定時器
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
當代表()被稱爲第二次,它給我的功能IsPlaying模塊的MCI錯誤(),稱它無法讀取設備。我的問題:
我是否犯了threading.Timer工作方式的錯誤? (以及我如何解決它?) 是否有另一種方法比threading.Timer實現我想要的東西?
我的想法到目前爲止,這可能是一個問題從其他線程訪問currentmusic
,但我不知道。我也不知道如何避免它。
Thx幫助
這可能是一個線程問題,正如你懷疑的那樣。由於這看起來像一個長期被遺棄的項目,從來沒有超過0.3版本,沒有其他人使用,你是否希望自己修復它?或者正在尋找解決方法,所以您不需要? – abarnert
另外,你的主線應該在這裏做什麼?它啓動'rep',然後退出。在這種情況下會發生什麼是平臺特定的,但我認爲在Windows中它只是意味着主線程掛起,直到後臺線程完成,這似乎不是很有用(也不會僅僅終止後臺線程)。解決這個問題的方法(如果這是你的目標)是讓後臺線程以某種方式發信號給主線程,而不是直接做這個工作,但是不知道主線程實際做了什麼,我無法進一步解釋。 – abarnert