Python+Eel调用JS设置图片不加载:仅长函数执行后显示问题
解决Eel框架中Python耗时任务执行时前端图片延迟显示的问题
问题核心是Python主线程被耗时任务阻塞,导致eel.set_image()的通信请求无法及时被处理,必须等整个generate函数执行完毕后,前端才能收到指令更新DOM。
解决方案:用线程异步执行耗时任务
把耗时的代码放到独立线程中运行,释放Eel的主线程来处理和前端的通信,这样eel.set_image()的指令能立刻被前端接收并执行。
修改后的Python代码
import threading import eel @eel.expose def generate(source, keyword): def run_tasks(): # 执行第一个耗时任务 # code that takes a long time to execute 1 # 通知前端显示图片 eel.set_image() # 执行第二个耗时任务 # code that takes a long time to execute 2 # 启动线程,不阻塞主线程 threading.Thread(target=run_tasks, daemon=True).start()
补充说明
- 使用
daemon=True可以让线程随主程序退出而结束,避免残留线程。 - 确保
temp.png的路径正确:如果你的Eel初始化是eel.init("web"),图片要放在web目录下,否则前端无法加载。
备选方案:强制Eel处理消息队列
如果不想用线程,可以在调用eel.set_image()后添加eel.sleep(0),强制Eel立刻处理前端通信消息,但这种方法仅适用于第二个耗时任务不是极长的场景:
@eel.expose def generate(source, keyword): # code that takes a long time to execute 1 eel.set_image() eel.sleep(0) # 触发Eel处理消息队列,让前端立刻收到指令 # code that takes a long time to execute 2
内容的提问来源于stack exchange,提问作者ajemalbatros
相关产品推荐
相关产品推荐

