优雅地管理Python代码执行进度——tqdm进度条工具实战以及进阶指南

简介: 优雅地管理Python代码执行进度——tqdm进度条工具实战以及进阶指南

前言


对于运行时间较长的程序,为其加上进度条,可以帮助我们监测代码进度,本文为我们介绍两个进度条工具。


一、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)

4f617a7900f04c1ea8d36903ece3d972.png


还可以加参数desc来帮助我们设置进度条的说明文字。

from tqdm import trange
import time
for i in trange(10, desc='这是一个平平无奇的进度条'):
  time.sleep(0.2)


7e47351a92ac45d1a3ec45242fdbaa62.png

除此以外,还可以预先实例化进度条对象,让说明文字动态变更。

from tqdm import trange 
import time
bar = trange(100, desc='这是一个平平无奇的进度条')
for i in bar:
    time.sleep(0.2)
    bar.set_description(f'第{i}场')


944abfed17a644f6914f25e652e7044d.png


1-2、配合jupyter notebook


只需要把开始的导包程序from tqdm import trange 换成from tqdm.notebook import trange 就可以啦!

54ab70e3e1d04fef95069324816e5376.png


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工具,可以方便地管理代码执行进度,并且支持多种自定义设置。

参考文章:

在Python中妥善使用进度条.


总结


7点半了,今天下班稍微有点晚。

相关文章
|
9月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
417 26
|
8月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
381 100
|
8月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
571 95
|
9月前
|
Python
Python的简洁之道:5个让代码更优雅的技巧
Python的简洁之道:5个让代码更优雅的技巧
380 104
|
9月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
665 99
|
8月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
458 88
|
8月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1391 68
|
9月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
965 7
|
9月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
426 2
|
9月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。

推荐镜像

更多