python EEL应用程序的启动过程

news2024/11/24 16:29:24

EEL 启动流程

  1. 初始化 EEL (eel.init()):

    • 设定静态文件目录,通常是包含 HTML、CSS、JavaScript 等文件的目录。
    • 扫描指定目录下的 JavaScript 文件,寻找通过 eel.expose() 暴露的函数。
  2. 启动 Web 服务器 (eel.start()):

    • 基于 Bottle 框架启动一个轻量级的 Web 服务器。
    • 服务器配置默认主页和静态资源的服务。
  3. 创建 WebSocket 服务:

    • 通过 Bottle 的插件或扩展来启动 WebSocket 服务。
    • WebSocket 用于支持浏览器(客户端)与 Python(服务器)之间的实时双向通信。
  4. 创建对应的 Python 函数:

    • 根据扫描到的暴露的 JavaScript 函数,动态创建 Python 中的对应函数,这些函数可用于从 Python 端调用 JavaScript 函数。
  5. 打开浏览器窗口(可选):

    • 如果配置了 EEL 以特定模式运行(如 Chrome 应用模式),EEL 可以自动打开一个浏览器窗口并加载应用。
  6. WebSocket 连接:

    • 客户端(浏览器)加载页面后,通过 EEL 的 JavaScript 部分建立 WebSocket 连接到服务器。
    • WebSocket 连接保持开启状态,等待来自客户端的调用或发送到客户端的数据。

 

  • 初始化阶段:设置基本配置,包括文件目录和 JavaScript 函数扫描,是启动过程的前提。
  • Web 服务器和 WebSocket:这两个组件是并行启动的,服务器处理静态文件请求,而 WebSocket 负责处理实时的数据交互。
  • 用户交互:一旦浏览器窗口打开,用户可以开始与应用交互,所有的前端调用都通过 WebSocket 传输到后端,并接收来自后端的响应。

为什么eel.init()之后,eel.start()之前就可以在python端通过eel.js_function_name()调用前端的js函数?并且调用的结果能在启动的界面中呈现出来,此时web服务器还未启动呢!官方文档的例子eel.say_hello_js('Python World!') 就在 eel.start('hello.html')之前。

import eel

# Set web files folder and optionally specify which file types to check for eel.expose()
#   *Default allowed_extensions are: ['.js', '.html', '.txt', '.htm', '.xhtml']
eel.init('web', allowed_extensions=['.js', '.html'])

@eel.expose                         # Expose this function to Javascript
def say_hello_py(x):
    print('Hello from %s' % x)

say_hello_py('Python World!')
eel.say_hello_js('Python World!')   # Call a Javascript function

eel.start('hello.html')             # Start (this blocks and enters loop)

这其实是EEL的排队机制在管理这些js_function调用。

EEL的队列工作机制

在 EEL 中,当你调用一个 JavaScript 函数,如 eel.say_hello_js('Python World!'),这个调用实际上并不是立即执行的。这个调用是放入一个队列中的,然后在 EEL 的 WebSocket 连接建立后才真正执行。eel.start() 函数负责启动服务器、设置 WebSocket 通信,并处理事件循环。在事件循环中,之前队列中的 JavaScript 调用会被发送到客户端执行。

这意味着,尽管 Python 代码中的调用顺序是在启动服务器之前,但 JavaScript 函数的执行仍然依赖于页面的加载和 WebSocket 连接的建立。

开发者的意图

这种设计允许开发者在代码中以一种直观的方式安排调用顺序,而无需担心实际的通信延迟。EEL 库内部处理了调用的延迟执行,确保所有事务都在正确的时间点上正确发生,即在页面准备好后。

实际应用中的注意事项

  • 阻塞与非阻塞模式eel.start() 默认是阻塞模式,它会启动一个事件循环并等待浏览器连接。如果需要在启动后执行其他 Python 代码,可以设置 block=False
  • 调用的顺序:尽管 Python 代码中看起来是先调用 eel.say_hello_js(),但这些调用只有在浏览器页面加载后才真正执行。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flexible.js+rem页面适配

简介 flexible.js 介绍 flexible.js 是一个用于移动端页面适配的 JavaScript 库,由阿里巴巴团队开发并开源。在移动 web 开发中,由于设备屏幕尺寸、分辨率以及像素比的差异,开发者通常需要编写额外的代码来确保页面在不同设备上都能正确显示…

AR系列路由器配置本地同一网段互通

A R 路由器是华为公司推出的企业级路由器产品系列,具有高可靠性、高性能和易管理等特点。AR 系列路由器提供的功能包括路由转发、安全接入、语音、视频、无线等多种业务,支持各种接入方式和协议,并且可以方便地进行扩展和升级。 实验拓扑图&…

Java面试八股之Java中的IO流分为几种

Java中的IO流分为几种 按数据单位分类: 字节流(Byte Stream):以字节(8位二进制数)为基本单位进行数据读写。字节流适合处理所有类型的数据,包括文本、图像、音频、视频等二进制文件。抽象基类…

微信小程序毕业设计-基于Java后端的微信小程序源码150套(附源码+数据库+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 🧡今天给大家分享150的微信小程序毕业设计,后台用Java开发,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设…

STM32_HAL_系统定时器(SysTick)_实现计时

1介绍 系统定时器(SysTick)是ARM Cortex-M处理器系列中的一个特殊定时器,它不属于STM32F1系列微控制器的外设,而是处理器内部的一个组件。SysTick定时器的作用是为操作系统或其他需要精确时钟计数和中断服务的应用提供基础的时间…

半个小时搞懂STM32面经知识——DMA

1.DMA 1.1 什么是DMA? DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数…

宝塔Linux面板5.9版本升级新版失败解决方法

下载地址:宝塔Linux面板5.9升级教程 宝塔5.9版本升级最新版宝塔失败,可以参考这份详细教程(不断更新中) 安装要求: Python版本: 2.6/2.7(安装宝塔时会自动安装) 内存:1…

结构体补充-位段

文章目录 位段介绍位段内存分配位段的使用注意事项结束 位段介绍 为什么会有位段呢? 我们直到一个int是4个字节表示32个bit位,但是比如2,3这样的整数,我们只需要2个bit位就可以了,那30个比特位不就是浪费掉了吗,所以位段就产生了 位段通过结构体来实现,位段表示方法…

几个简单操作,让3dmax渲染速度起飞‼️

3dmax渲染慢原因: 场景复杂度:场景中模型、材质、纹理和贴图的复杂性增加渲染时间。优化场景,使用简化模型和材质可提高速度。 高质量设置:高级渲染效果如光线追踪、全局照明等增加计算量。适当降低设置,如减少分辨率…

JDK的串行收集器介绍与优化指南-02

对象的生命周期 对象的生命周期 在Java中,对象的生命周期通常包括以下几个阶段,这些阶段与JVM的内存管理和垃圾收集机制密切相关。 创建阶段 (1)为对象分配存储空间:当使用new关键字或其他方式(如反射、克隆、反序列化等)创建一个对象时,JVM首先会在堆内存中为其分配…

网络安全----小程序渗透测试反编译审计漏洞

一、什么是反编译审计漏洞 微信小程序反编译渗透测试是一种针对微信小程序的安全测试方法,是在通过对小程序源代码的反编译和分析,发现潜在的安全漏洞,并对其进行渗透测试以验证其安全性的一种方法。 二、测试流程及其步骤 反编译小程序&a…

【opencv】图像处理(一)

实验环境:anaconda、jupyter notebook 实验用到的包:numpy,matplotlib,opencv 一、opencv安装 最好使用python3.6(我之前用的3.9安装opencv3.4.1.15会失败) conda create -n cv python3.6安装opencv3.4.1.15(3.4.2版…

[C语言知识]return和exit到底有什么区别?

前言 💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C语言知识系列 用通俗易懂的语言让编程语言不再困难 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭…

windows版本达梦数据复制软件 DMDRS安装

安装步骤: 1: 2:注意安装提醒 3:接受 4:选择安装路径,注意权限以及所需空间大小 5:观察支持的数据源类型

2024审计师报名流程图解❗报名时间汇总❗

2024年审计专业技术资格考试报名正在进行中 🔍审计报名流程 一、考生注册 打开浏览器登录中国人事考试网进行【考生注册】,按照提示认真填写个人注册信息,确保个人信息真实、完整、准确,并上传已处理好的照片。 二、考生报名 1⃣考…

计算机毕业设计springboot体育馆场地预约管理系统【附源码】

计算机毕业设计springboot体育馆场地预约管理系统[附源码] 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制…

ue5地编模块学习记录

ue5网站功能3d溜溜网下载模型https://anyconv.com/max-to-fbx-converter/3dmax转换fbx模型解决问题记录 一、光源 搜索光源搜索不到的时候可以点击 窗口> 对场景内的光照进行处理 二、认识节点 在UE5中,Depth Fade节点通常用于在材质中实现深度淡化效果&#…

element ui输入框后面带输入的字符数量

使用el-input的属性&#xff1a; maxlength&#xff1a;最长字符限制&#xff1b; show-word-limit&#xff1a;显示输入字符数量&#xff1b; 例&#xff1a; <el-input v-model"title" placeholder"请输入名称" maxlength"200" show-wor…

kafka 图形化

介绍 idea 中的一个插件 kafkalytic,kafka 图形化 简单又强大 安装 使用界面 总体信息 数据查看

基于Java的qq截图工具参考论文(论文 + 源码)

【免费】基于Java的qq截图工具.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304179 基于Java的qq截图工具 摘要 当今时代是飞速发展的信息时代&#xff0c;人们在对信息的处理中对图像的处理量与日俱增&#xff0c;这一点在文档人员上显得非常突出。 本软…