开发期,提升开发效率,让代码改动立等可见,避免频繁重启
运维期,在服务端不断线情况下修复紧急bug
对于bug修复来说,服务端如果不保持状态,那么热更新的必要性不那么大,但如果服务端持有复杂状态,那么热更新就会是一个比较合适的选择。
热更新的要点
Python代码是以module进行组织的,代码热更新就是module的热更新。
Python提供的内置函数reload用于重新加载模块,然而直接使用reload并不能够解决热更新这一问题。热更新的要点在于需要让已经创建的对象能够执行更新以后的代码。这也是autoreload.py、pyded_reload.py中大部分代码实现的目的所在。
更新操作拆解 更新普通函数
整个热更新逻辑中,函数的更新是最为重要的,因为函数是具体逻辑的执行单元。参照上述实现,定义函数更新的实现如下,
上述函数可以用简单样例进行验证,
更新decorator修饰的函数
目前的实现可以通过上面的测试用例,与pydevd_reload.py中的_update_fun