在其他线程中显示图像或视频



作为一点背景,我从另一个开发人员那里拿了一个项目,他把整个项目写成一个从上到下运行的大文件。

管理员希望在脚本执行过程中的某些点在屏幕上显示图像/视频,而在其他执行点消失。

我已经广泛地使用Tk,但我仍然受到缺乏线程安全性及其阻塞mainloop()函数的限制。


是否有一种方法在python显示图像/视频异步/以非阻塞的方式,而主线程仍然执行?在这个项目的上下文中,API必须类似于下面的内容。

if __name__ == "__main__":
gui = load_gui()

gui.display_image("doing_math.png") #doesn't block
for i in range(0, 500):
print(str(i))

gui.display_image("math_complete.mp4")#doesn't block
sleep(2)
gui.clear_display()

目前我正在使用尝试使用Tk如下所示。但是它受到mainloop()阻塞其余脚本执行的限制。

class MediaGui(tk.Tk):
def __init__(self):
self.mainloop()
...
gui = MediaGui() #this line blocks because of mainloop
gui.load_image("image.png")

试试这个:

from concurrent.futures import ThreadPoolExecutor
gui = load_gui()
def run_io_tasks_in_parallel(tasks):
with ThreadPoolExecutor() as executor:
running_tasks = [executor.submit(task) for task in tasks]
for running_task in running_tasks:
running_task.result()
run_io_tasks_in_parallel([
lambda:  gui.display_image("doing_math.png"),
lambda: gui.display_image("math_complete.mp4"),
])

最新更新