python代码热更原理及实现

news/2024/11/15 15:01:35/

一、简介:

热更,指程序具有在运行过程中修改代码,不重启,而直接生效的能力。

热更对代码的微调,debug非常友好,不再需要重新启动程序,能直接在已有的上下文环境中直接测试。

二、接入流程:

  1. hot_update 文件夹复制到项目根目录
  2. 在程序启动代码里,添加以下代码
  import hot_upatehot_update.start()
  1. 启动程序之后,hot_update 文件夹下会自动创建两个 .txt 文件
hot_update|-- __init__.py|-- update_file.txt *   # 热更新操作文件|-- update_log.txt  *   # 日志文件

至此热更环境已配置成功

三、使用:

<说明>

如果需要更新某个文件,只需要在 update_file.txt 文件下写需要更新的文件,在1~2秒的延迟之后,
可检查update_log.txt文件判断是否更新成功

程序会每秒检查 update_file.txt 文件,找到第一个 没有#号的行,然后对其进行热更

<举例>

场景1:

  • 问题:我在 ui.kv.sale.sale_screen 目录下修改了一行代码,怎么热更?如果是多个文件呢?
  • 处理:在 update_file.txt 中写上需要更新的文件(如下),然后保存。
    ui.kv.sale.sale_screen
    
    多个文件以 , 分割
    ui.kv.sale.sale_screen,ui.kv.sale.total_bar
    
    然后查看 update_log.txt 如果出现更新成功提示,则代表成功(如下)
    2022-11-28 16:09:03 更新文件: ui.kv.sale.sale_screen  ok
    

场景2:

  • 问题:我不想每次都输入一遍文件路径,有没有办法?
  • 处理:在对应行随便一个地方加上 #,该行不会被热更,会继续往下寻找第一个没有 # 的行热更
    ui.kv.sale.sale_screen,ui.kv.sale.total_bar #
    

四、原理简单介绍

1、引入reload

python 中有个 reload函数,会对模块进行重新加载,
例如对模块 A 执行,reload(A),则模块 A 中的模块级内容会重新加载。

不过,被reload的模块中,某个类已经生成的对象,依然指向的是旧模块的代码。也就是说,你在某个类的方法中添加了一行打印,
热更之后这些已经存在的对象并不会生效。

2、已存在对象的处理

而这些对象该怎么处理?
首先是需要理解python类函数的执行流程。

对象执行函数,都知道需要传入一个 self,所以理解以下内容应该不是难事:
对象在执行某个函数时,其实是执行的一个普通类函数,然后传入当前对象。

而类函数也是引用的一个普通函数,所以当reload某个模块,将类重新加载之后,需要做到:
仅仅只是更新函数代码,保留类的旧环境(类属性的值等等)

因为已有的对象是指向的旧类,所以其中一种方式就是对新生成的类和旧对象所引用的类进行改造

  1. 旧对象引用的类,将类中的方法引用指向新生成类的方法
  2. 新类指向旧类,使下次创建对象能保留之前类环境

从而做到,仅热跟代码,而保存已有的运行环境

想要了解更多细节,可以看看这篇文章,写的很通俗易懂 传送门

五、后续拓展

1、增加ui

可以再 pos 程序中增加一个ui界面,直接输入需更新的文件,写入 update_file.txt。增加一个线程,定时读取update_log.txt
,将当前的信息展示到界面上,做到实时判断是否更新成功(当然也可以给右下角的非阻塞弹窗提示)

2、热更 .kv 文件

对项目 kv 暂时不太熟悉,不过应该是可行的。


http://www.ppmy.cn/news/360723.html

相关文章

宁愿给新员工开高薪,也不愿意给老员工涨薪,那些大厂老板都是怎么想的?

事情是这样的&#xff0c;作为公司2年工龄的测试老员工&#xff0c;技术过关&#xff0c;独当一面&#xff0c;领导对我也很放心。 原本只想涨个30%的薪水&#xff0c;就留下来勤勤恳恳和公司共进退&#xff0c;但HR死活不肯&#xff0c;各种规章制度卡得死死的&#xff0c;顶…

老板该关心什么?

今天到我们的合作伙伴处看看&#xff0c;听说他们公司实施的ERP已上线&#xff0c;也看看使用效果&#xff0c;随即问一问员工&#xff0c;又问一问老板&#xff0c;沟通一会&#xff0c;突然有个想法&#xff0c;象他们这样高速成长的公司岂止他们一家。从树木看森林&#xff…

中国新厨房,老板电器的未来有多大?

中国企业&#xff0c;一度很躁动。在“不要把鸡蛋放在同一个篮子里”这句话的驱使下&#xff0c;做地产的布局汽车、快消&#xff0c;做航空的进军地产、健康&#xff0c;做视频的踏足硬件、消费。而品类扩张成为家电行业的通用技法。 上世纪80年代&#xff0c;老板电器开始进…

一个小公司老板的日常管理

1. 小公司如何留住骨干&#xff1a; 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发工资 10.学会说“不” 11.不要在公司内部奢望交朋友 12.避免当场做决定 13.政策的制定 14.矬子里拔将军 15.有些事情越透明越好 16.发劳保用…

卓老板之今日金句1

从未有过一个真正有用并且深邃的理论是真的依靠纯粹思辨而发现的。 ⏤⏤ 阿尔伯特爱因斯坦 文章&#xff1a; 《极限&#xff1a;为什么电价夜间减半&#xff1f;》&#xff0c;请在微信客户端打开链接。

你就这样被坏老板决定了?

有位朋友在分答上问过我一个问题&#xff1a; 跟同事抱怨工作的事情是要坚决避免的低情商行为么&#xff1f; 这让我想起我们充满抱怨的工作来啦&#xff1a; 经理根本就不懂技术&#xff0c;凭什么领导我&#xff1f;就因为我不加班&#xff0c;就让我绩效是D&#xff0c;太不…

转:你“恨”你的老板吗

个人理解&#xff1a;恨老板&#xff1f;老板离你还有八丈远&#xff0c;不如说是恨顶头上司、领导&#xff1b;画无数个圈圈诅咒他&#xff0c;祖宗十八代问候个遍。为什么&#xff1f;矛盾、难以琢磨的上下级关系&#xff0c;看对超、合拍不易。 要走要留痛快点&#xff0c;只…

一个不像老板的好老板

一个不像老板的好老板 (以前写的)毕业不久&#xff0c;就到AV工作了&#xff0c;上了几天班&#xff0c;公司里有好几十个人&#xff0c;在一个大办公室里。大家都直呼其名&#xff0c;平等自由的气氛&#xff0c;让人心旷神怡。除了自己的上司外&#xff0c;根本分不清谁是管理…