发布时间:2022-12-13 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印
热加载技术:修改Python代码并实时查看结果 ⛵

? 作者:韩信子@ShowMeAI
? Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56
? 本文地址:https://www.showmeai.tech/article-detail/406
? 声明:版权所有,转载请联系平台与作者并注明出处
? 收藏ShowMeAI查看更多精彩内容

? 引言

热加载技术:修改Python代码并实时查看结果 ⛵

在运行 Python 脚本时,我经常发现自己忘记打印所有必要的详细信息来跟踪代码项目的进度和中间信息。我们经常在训练机器学习模型时遇到各种各样的信息记录问题,当然,问题不仅限于机器学习,像爬虫等场景也需要做大量记录,但我们经常在运行起代码之后才意识到忘记做一些需要记录的信息输出。

如果我们暂停运行的代码,重新修改补充代码并运行,代价可能是我们已经训练数个小时的模型参数被舍弃而重新训练,这是非常不值当的。在python中,有另外一项技术可以解决这个问题,在本篇内容中,我们就来给大家讲讲python的热加载技术。

? Reloading库

?Reloading 是一个 Python工具库,它让我们可以在每次迭代之前从源代码中重新加载(或函数),我们可以修改已经运行的代码并向其添加更多详细信息,而不会丢失任何当前已执行过程。

我们可以通过以下命令安装reloading:

pip install reloading

? 重新加载循环体代码

假设我们有一个循环,它完成一个简单的功能:每次迭代后将值减半。但我们忘记在这个循环中打印迭代次数了,现在想修改它。

from time import sleep
value = 100
iterations = 10
for iteration in range(iterations):
    print(f"value = {value}")
    value = value/2
    sleep(2)

不借助reloading,我们只能重新运行它。

但是,借助 reloading,我们可以重新加载循环体代码,如下所示:

from time import sleep
from reloading import reloading
value = 100
iterations = 10
for iteration in reloading(range(iterations)):
    print(f"value = {value}")
    value = value/2
    sleep(2)

动图演示如下:

热加载技术:修改Python代码并实时查看结果 ⛵

? 重新加载修改后的函数

与重新加载循环体代码类似,我们也可以在每次迭代后重新加载函数体。以函数 half_value为例:

from time import sleep
def half_value(value):
    print(f"value = {value}")
    value = value/2
    return value
value = 100
iterations = 10
for iteration in range(iterations):
    value = half_value(value)
    sleep(2)

要重新加载函数体,我们可以使用 reloading构建装饰器。如下所示:

from time import sleep
from reloading import reloading
@reloading
def half_value(value):
    print(f"value = {value}")
    value = value/2
    return value
value = 100
iterations = 10
for iteration in range(iterations):
    value = half_value(value)
    sleep(2)

修改之后,我们可以在运行时修改函数。动图演示如下:

热加载技术:修改Python代码并实时查看结果 ⛵

参考资料

推荐阅读

热加载技术:修改Python代码并实时查看结果 ⛵