前言
对于运行时间较长的程序,为其加上进度条,可以帮助我们监测代码进度,本文为我们介绍两个进度条工具。
一、tqdm基础介绍
tqdm是一个Python的进度条工具,它可以在Python的循环中以可视化的方式显示进度条和估计剩余时间。它可以应用于各种循环,例如for循环、while循环和迭代器等。
tqdm的使用非常简单,只需要将要迭代的对象传递给tqdm函数即可。例如:
from tqdm import tqdm for i in tqdm(range(100)): # do something
在上面的代码中,range(100)是要迭代的对象,tqdm函数会返回一个可迭代的对象,每次迭代都会更新进度条。可以看到,在for循环中使用tqdm,每次循环都会打印出一个进度条,显示当前的进度和预估剩余时间。
除了在循环中使用外,tqdm还提供了其他一些功能,例如可以自定义进度条的样式、设置进度条的初始值、设置进度条的步长等。它还支持多线程和多进程,可以在并行计算中方便地使用。
1-1、基础用法
安装:pip install tqdm
针对迭代对象是range的用法,可以调用trange来产生进度条。
from tqdm import trange import time for i in trange(10): time.sleep(0.2)
还可以加参数desc来帮助我们设置进度条的说明文字。
from tqdm import trange import time for i in trange(10, desc='这是一个平平无奇的进度条'): time.sleep(0.2)
除此以外,还可以预先实例化进度条对象,让说明文字动态变更。
from tqdm import trange import time bar = trange(100, desc='这是一个平平无奇的进度条') for i in bar: time.sleep(0.2) bar.set_description(f'第{i}场')
1-2、配合jupyter notebook
只需要把开始的导包程序from tqdm import trange 换成from tqdm.notebook import trange 就可以啦!
1-3、配合pandas中的apply
tqdm对pandas中的apply也提供了支持,用法是:
import pandas as pd from tqdm.notebook import tqdm # 每个单独的porgress_apply运行之前一定要先执行tqdm.pandas() tqdm.pandas() df=pd.DataFrame({'a', range(10)}) x = df.progress_apply(lambda x: time.sleep(0.2))
1-4、直接遍历列表
注:其他问题是遍历range,这里我们可以直接遍历列表、series、等可迭代对象。
from tqdm import tqdm for i in tqdm(range(100), bar_format='{percentage:3.0f}%'): # do something
这样就会在进度条上显示当前的进度百分比。
2-2、初始值和步长
可以通过设置参数initial和step来设置进度条的初始值和步长。例如,可以将进度条的初始值设置为50,步长设置为2:
from tqdm import tqdm for i in tqdm(range(100), initial=50, step=2): # do something
这样进度条就会从50%开始,并且每次循环增加2%。
2-3、嵌套进度条
tqdm还支持在循环中嵌套使用进度条,例如在for循环中嵌套while循环:
from tqdm import tqdm for i in tqdm(range(10)): for j in tqdm(range(100), leave=False): # do something
这样就会在外层循环中显示一个进度条,在内层循环中显示另一个进度条。参数leave用于控制内层进度条是否在外层进度条完成后消失。
2-4、多线程和多进程支持
tqdm还支持在多线程和多进程中使用,可以通过设置参数desc来给每个进程或线程命名。例如:
from tqdm import tqdm import multiprocessing def worker(num): for i in tqdm(range(1000000), desc=f'Worker {num}'): pass if __name__ == '__main__': with multiprocessing.Pool(4) as p: p.map(worker, [1, 2, 3, 4])
这样就会在每个进程的进度条上显示进度,并显示进程的名称。
总之,tqdm是一个非常实用的Python工具,可以方便地管理代码执行进度,并且支持多种自定义设置。
参考文章:
总结
7点半了,今天下班稍微有点晚。