熱載入技術:修改Python程式碼並實時檢視結果 ⛵

語言: CN / TW / HK

💡 引言

在執行 Python 指令碼時,我經常發現自己忘記列印所有必要的詳細資訊來跟蹤程式碼專案的進度和中間資訊。我們經常在訓練機器學習模型時遇到各種各樣的資訊記錄問題,當然,問題不僅限於機器學習,像爬蟲等場景也需要做大量記錄,但我們經常在執行起程式碼之後才意識到忘記做一些需要記錄的資訊輸出。

如果我們暫停執行的程式碼,重新修改補充程式碼並執行,代價可能是我們已經訓練數個小時的模型引數被捨棄而重新訓練,這是非常不值當的。在python中,有另外一項技術可以解決這個問題,在本篇內容中,我們就來給大家講講python的熱載入技術。

💡 Reloading庫

📘Reloading 是一個 Python工具庫,它讓我們可以在每次迭代之前從原始碼中重新載入(或函式),我們可以修改已經執行的程式碼並向其新增更多詳細資訊,而不會丟失任何當前已執行過程。

我們可以通過以下命令安裝reloading:

pip install reloading

💦 重新載入迴圈體程式碼

假設我們有一個迴圈,它完成一個簡單的功能:每次迭代後將值減半。但我們忘記在這個迴圈中列印迭代次數了,現在想修改它。

```python from time import sleep

value = 100 iterations = 10

for iteration in range(iterations):

print(f"value = {value}")
value = value/2
sleep(2)

```

不借助reloading,我們只能重新執行它。

但是,藉助 reloading,我們可以重新載入迴圈體程式碼,如下所示:

```python 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)

```

動圖演示如下:

💦 重新載入修改後的函式

與重新載入迴圈體程式碼類似,我們也可以在每次迭代後重新載入函式體。以函式 half_value為例:

```python 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構建裝飾器。如下所示:

```python 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)

```

修改之後,我們可以在執行時修改函式。動圖演示如下:

參考資料

推薦閱讀

本文正在參加「金石計劃 . 瓜分6萬現金大獎」

「其他文章」