gpt4 book ai didi

multithreading - 如何使用wxpython线程来防止阻塞主循环

转载 作者:行者123 更新时间:2023-12-04 18:50:56 25 4
gpt4 key购买 nike

我正在做一个学校项目,在 python 平台上开发一个定制的媒体播放器。问题是当我使用 time.sleep(duration) 时,它会阻塞我的 GUI 的主循环,阻止它更新。我咨询过我的主管并被告知使用多线程,但我不知道如何使用线程。有人会建议我如何在下面的场景中实现线程吗?


代码:

def load_playlist(self, event):
playlist = ["D:\Videos\test1.mp4", "D:\Videos\test2.avi"]
for path in playlist:
#calculate each media file duration
ffmpeg_command = ['C:\\MPlayer-rtm-svn-31170\\ffmpeg.exe', '-i' , path]

pipe = subprocess.Popen(ffmpeg_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
results = pipe.communicate()

#Regular expression to get the duration
length_regexp = 'Duration: (\d{2}):(\d{2}):(\d{2})\.\d+,'
re_length = re.compile(length_regexp)

# find the matches using the regexp that to compare with the buffer/string
matches = re_length.search(str(results))
#print matches

hour = matches.group(1)
minute = matches.group(2)
second = matches.group(3)

#Converting to second
hour_to_second = int(hour) * 60 * 60
minute_to_second = int(minute) * 60
second_to_second = int(second)

num_second = hour_to_second + minute_to_second + second_to_second
print num_second

#Play the media file
trackPath = '"%s"' % path.replace("\\", "/")
self.mplayer.Loadfile(trackPath)

#Sleep for the duration of second(s) for the video before jumping to another video
time.sleep(num_second) #THIS IS THE PROBLEM#

最佳答案

您可能想看看 wxPython wiki,其中有几个使用线程、队列和其他有趣事物的示例:

我还在这里写了一个关于这个主题的教程:http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/

要记住的主要事情是,当您使用线程时,您不能直接调用您的 wx 方法(即 myWidget.SetValue 等)。相反,您需要使用 wxPython 线程安全方法之一:wx.CallAfter、wx.CallLater 或 wx.PostEvent

关于multithreading - 如何使用wxpython线程来防止阻塞主循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com