Python,线程无法退出
我正在用Python开发一个小型媒体播放器。遇到的问题是,我用来播放.wav文件的线程一直没有结束。我提供了线程的类,以及我如何创建这个线程的代码。
class myThread (threading.Thread):
def __init__(self, threadID, wf):
self.threadID = threadID
self.wf = wf
threading.Thread.__init__(self)
def run(self):
global isPaused
global isStopped
self.waveFile = wave.open(self.wf, 'rb')
#initialize stream
self.p = pyaudio.PyAudio()
self.stream = self.p.open(format = self.p.get_format_from_width(self.waveFile.getsampwidth()), channels = self.waveFile.getnchannels(), rate = self.waveFile.getframerate(), output = True)
self.data = self.waveFile.readframes(1024)
isPaused = False
isStopped = False
#main play loop, with pause event checking
while self.data != '':
while isPaused != True:
if isStopped == False:
self.stream.write(self.data)
self.data = self.waveFile.readframes(1024)
elif isStopped == True:
self.stream.close()
self.p.terminate()
self.stream.close()
self.p.terminate()
我用以下代码来控制线程的创建:
foo = wx.FileDialog(self, message="Open a .wav file...", defaultDir=os.getcwd(), defaultFile="", style=wx.FD_MULTIPLE)
foo.ShowModal()
self.queue = foo.GetPaths()
self.threadID = 1
while len(self.queue) != 0:
self.song = myThread(self.threadID, self.queue[0])
self.song.start()
while self.song.isAlive():
time.sleep(2)
self.queue.pop(0)
self.threadID += 1
如果你有什么想法,我会很感激。
2 个回答
0
你需要确保当isStopped为真时,把self.data设置为空。
while self.data != '':
while isPaused != True:
if isStopped == False:
self.stream.write(self.data)
self.data = self.waveFile.readframes(1024)
elif isStopped == True:
self.data = ''
self.stream.close()
self.p.terminate()
self.stream.close()
self.p.terminate()
0
这个线程里的代码是永远不会结束吗?还是说主要的 while
循环一直在运行?
while self.data != '': while isPaused != True: if isStopped == False: self.stream.write(self.data) self.data = self.waveFile.readframes(1024) elif isStopped == True: self.stream.close() self.p.terminate()
我只是随便想想 - 从这个情况来看,如果 self.data
被设置了,像 self.data != ''
这样的条件就会一直成立,这样的话 while
循环就不会结束了。只是我的一个想法。