對於開發或者運維來說,使用 Python 去完成一些跑批任務,或者做一些監控事件是非常正常的情況。那么如何有效地監控任務的進度?除了在任務中加上 Log 外,還能不能有另一種方式來了解任務進展到哪一步了呢?
這就是今天我們來了解的內容——進度條。
標准輸出
首先說一下在操作系統中,都有哪些控制符:
-
\r: 將光標移動到當前行的首位而不換行;
-
\n:將光標移動到下一行,並不移動到首位;
-
\r\n:將光標移動到下一行首位。
那讓我們來看下如何通過 Python 來將標准輸出中添加進度條吧。
import sys import time def progress_bar(total): """ 進度條效果 """ # 獲取標准輸出 _output = sys.stdout # 通過參數決定你的進度條總量是多少 for count in range(0, total + 1): # 這里的second只是作為工作量的一種代替 # 這里應該是有你的主程序,main() _second = 0.1 # 模擬業務的消耗時間 time.sleep(_second) # 輸出進度條 _output.write(f'\rcomplete percent:{count:.0f}') # 將標准輸出一次性刷新 _output.flush() progress_bar(100)
來看下實際效果:
▌Tqdm 模塊
Tqdm 是一個快速、擴展性強的進度條工具庫,它提供了非常多的接口,有興趣的小伙伴可以了解一下。
GitHub 地址是:https://github.com/tqdm/tqdm。
我們來看下,如何使用 Tqdm 模塊來實現進度條。
1. 首先是安裝,非常簡單。
pip install tqdm
2. 接下來就是具體的操作。
from time import sleep from tqdm import tqdm # 這里同樣的,tqdm就是這個進度條最常用的一個方法 # 里面存一個可迭代對象 for i in tqdm(range(1, 500)): # 模擬你的任務 sleep(0.01)
是不是看到這里發現,Tqdm 非常的簡單呢?這只是一個例子,它也可以非常的復雜,同時也支持多線程、多進程,還有 Pandas。
來一個多進程的感受下吧。