You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:13:23