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

相关文章
|
3天前
|
并行计算 C语言 开发者
优化Python代码的五大技巧
Python作为一种流行的编程语言,在各种应用场景中广泛使用。然而,随着项目规模的增长和需求的变化,Python代码的性能和可维护性也成为了关键问题。本文将介绍优化Python代码的五大技巧,帮助开发者提升代码效率和质量。
|
13天前
|
监控 Python
Python中的装饰器:提升代码灵活性与可读性
在Python编程中,装饰器是一种强大的工具,能够提升代码的灵活性和可读性。本文将介绍装饰器的基本概念、使用方法以及实际应用场景,帮助读者更好地理解和利用这一功能。
|
14天前
|
缓存 监控 算法
优化Python代码性能的10个技巧
提高Python代码性能是每个开发者都需要关注的重要问题。本文将介绍10个实用的技巧,帮助你优化Python代码,提升程序的运行效率和性能表现。无论是避免内存泄漏、减少函数调用次数,还是使用适当的数据结构,都能在不同场景下发挥作用,使你的Python应用更加高效稳定。
|
2天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
19 1
|
2天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
11 1
Flask框架在Python面试中的应用与实战
|
4天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6
|
4天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
9 1
|
5天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
11 0
|
5天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
9 1
|
5天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
10 1