优雅地管理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点半了,今天下班稍微有点晚。

相关文章
|
4月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
574 7
|
4月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
4月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
312 100
|
4月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
483 95
|
4月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
217 88
|
4月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
165 12
|
4月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
455 1
|
4月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
860 1
|
4月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
453 0
|
4月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
518 0

推荐镜像

更多