python flask热更新_客户端python热更新

本文介绍了Python中实现客户端热更新的原理和方法,包括为何标准的`reload`函数不适用于游戏热更新,以及如何自定义`reload`以实现代码定义的更新,同时保持数据的不变化。通过更新函数、类内容以及静态方法和类方法,实现热更新功能,以提高开发效率和紧急BUG的修复能力。
摘要由CSDN通过智能技术生成

介绍:

热更新,就是在维持服务不间断的情况下,对软件代码逻辑或配置数据进行更新修复。随着游戏项目引入了脚本语言以后,热更新技术逐渐成为了标配,在我经历过的游戏项目中,无论是服务端还是客户端,版本的更新迭代都是围绕着静态patch和动态patch(热更新)来进行的。下面来谈一下客户端Python热更新的处理。

原理:

标准import

我们知道,import可以导入一个标准的python模块,将模块载入内存,并加到sys.modules中。多次import同一模块只是将名称导入到当前的Local名字空间,也就是一个模块不会重复载入。

reload函数

reload()函数可以重新载入已经导入的模块,这样看起来就可以热更新python模块了。可惜的是,python原生的reload函数远不能满足游戏热更新的问题,原因如下:

reload重新加载的模块不会删除旧版本的模块,也就是已经引用的旧模块无法更新

同样因为不能旧对象的引用,使用from ... import ... 方式引用的模块同样不能更新

reloas(m)后,class及其派生class的实例对象,仍然使用旧的class定义。

加载模块失败时候,没有rollback机制,需要重新import该模块

因此,有必要结合游戏的情景,自定义适合的reload。新的自定义reload目的是为了达到在原程序不结束的情况下,让程序能动态加载改动后的代码。主要想达到下面两点:

提升开发期的开发效率

在游戏不重启的情况下修复紧急BUG

实现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值