欢迎访问宙启技术站
智能推送

高级用法:使用tqdm()库实现进度条显示和监控的进阶技巧

发布时间:2023-12-28 12:20:52

tqdm是Python中一个非常实用的库,可以帮助我们实现进度条的显示和监控。它提供了简单的API,可以方便地在循环中添加进度条,并实时显示进度和剩余时间等信息。下面我们将介绍tqdm库的高级用法,并给出一些使用例子。

1. 自定义进度条样式

使用tqdm库默认的样式可以显示简单的进度条,但我们也可以根据自己的需求进行个性化定制。通过设置参数bar_format,我们可以指定进度条的显示格式。比如可以修改进度条的长度、添加自定义文本等。

from tqdm import tqdm

N = 1000

t = tqdm(range(N), bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt}')

for i in t:
    # 做一些任务
    ...
    t.set_postfix({'loss': loss.item()})  # 在进度条后显示损失值

t.close()

上述例子中,我们设置了进度条的格式为{l_bar}{bar}| {n_fmt}/{total_fmt},其中{l_bar}表示进度条左侧的文本,{bar}表示进度条本身,{n_fmt}表示当前的迭代数,{total_fmt}表示总迭代数。通过设置t.set_postfix(),我们还可以在进度条后显示一些自定义的文本,如损失值。

2. 并行处理进度条

有时我们需要在多个线程或进程中同时处理任务,并且希望能够同时显示它们的进度。tqdm中提供了一个tqdm_notebook函数,可以实现在Jupyter Notebook中显示并行任务的进度条。我们可以使用tqdm_notebook来替代tqdm,并设置参数position来指定进度条在Jupyter Notebook中的位置。

from tqdm import tqdm_notebook as tqdm
import time
from concurrent.futures import ThreadPoolExecutor

N = 8

with tqdm(total=N, position=0, leave=True) as progress_bar:
    def task(n):
        time.sleep(n)
        progress_bar.update(1)

    with ThreadPoolExecutor() as executor:
        for i in range(N):
            executor.submit(task, i)

上述例子中,我们使用tqdm_notebook替代了tqdm,并设置进度条的位置为0。然后,我们使用ThreadPoolExecutor来创建一个线程池,并使用executor.submit()提交任务。在任务执行时,进度条会实时更新。

3. 监控代码块执行时间

有时候我们需要知道某个代码块的执行时间,可以使用tqdm的一个函数trange()来监控代码块的执行时间,并将其显示在进度条上。使用方法非常简单,只需将代码块放在tqdm.trange()的上下文中即可。

import time
from tqdm import trange

with trange(100) as t:
    for i in t:
        # 做一些任务
        ...
        time.sleep(0.1)

上述例子中,我们使用tqdm.trange()来循环100次,并在每次循环时更新进度条。同时,我们还通过t.set_postfix()方法,在进度条后显示一些自定义的文本。

总结:

tqdm是Python中一个非常实用的库,可以帮助我们实现进度条的显示和监控。上述介绍了tqdm的一些高级用法,并给出了相应的使用例子。希望这些内容对你有所帮助,能够更好地使用tqdm来实现进度条显示和监控。