python可视化:tqdm进度条控制台输出模块

news2024/10/5 14:05:28

前言

        在处理大量数据或执行耗时操作时,了解代码执行的进度是至关重要的。在Python中,通过使用进度条可以有效地实现对代码执行进度的可视化展示。

        tqdm 是一个快速、可扩展的Python进度条库,能够实时显示代码执行的进度。并且它提供了简洁的API,因此开发者可以轻松地为循环、迭代器等任务添加进度条,让你一目了然地了解代码执行的进展情况。

        

基础使用

from tqdm import tqdm
import time


# 某个你需要执行的方法
def time_cut(data):
    # 每次调用,休眠data*0.1秒
    time.sleep(data * 0.1)


# 模拟一个耗时的任务,调用同一个方法10次
def some_long_task():
    for index in tqdm(range(10), desc="Processing"):
        # 模拟任务处理时间
        time_cut(index)


# 调用耗时任务函数
some_long_task()

顺序执行

from tqdm import tqdm
import time


def method_A():
    # 模拟方法A的执行
    time.sleep(1)
    return "Method A result"


def method_B():
    # 模拟方法B的执行
    time.sleep(1)
    return "Method B result"


def method_C():
    # 模拟方法C的执行
    time.sleep(1)
    return "Method C result"


# 顺序执行A、B、C三个方法,并显示进度条
def sequential_ABC():
    results = []

    # 使用tqdm显示进度条
    with tqdm(total=100) as pbar:
        # 执行方法A
        result_A = method_A()
        results.append(result_A)
        pbar.update(30)  # 更新进度条

        # 执行方法B
        result_B = method_B()
        results.append(result_B)
        pbar.update(30)  # 更新进度条

        # 执行方法C
        result_C = method_C()
        results.append(result_C)
        pbar.update(40)  # 更新进度条

    return results


# 调用顺序执行方法的函数
if __name__ == "__main__":
    results = sequential_ABC()
    print("结果:", results)

 多线程调用

        这里要注意一下,如果子线程一旦使用print()输出,将导致出现梯形进度条

import concurrent.futures
from tqdm import tqdm
import time


# 并行处理的主函数
def parallel_processing(data_list, num_threads):
    with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
        futures = []
        for data in data_list:
            if data % 2 == 0:
                future = executor.submit(process_data, data)
            else:
                future = executor.submit(process_data1, data)
            futures.append(future)

        # 使用tqdm包装executor.map以显示进度条
        results = []
        with tqdm(total=len(data_list), desc="process") as pbar:
            for future in concurrent.futures.as_completed(futures):
                result = future.result()
                results.append(result)
                pbar.update(1)

    return results


# 你的并行处理函数
def process_data(data):
    time.sleep(data)  # 模拟处理数据的耗时操作
    return data * 2  # 假设这里是对数据进行处理的函数


# 你的并行处理函数
def process_data1(data):
    time.sleep(1)  # 模拟处理数据的耗时操作
    return data * 2  # 假设这里是对数据进行处理的函数


if __name__ == "__main__":
    # 要处理的数据列表
    data_list = list(range(10))

    # 设置线程数量
    num_threads = 4

    # 调用并行处理函数
    results = parallel_processing(data_list, num_threads)

    # 打印结果
    print("处理结果:", results)

         我没研究解决方案,如果有人能解决这一问题,请评论区指教

多进程调用

        【tqdm】貌似不支持管理【下属多进程任务】,因此你可能需要在【tqdm】之上建立进程来管理【tqdm和与之关联的任务】,而不是在tqdm下级建立进程

        并且相同的是,tqdm与多线程一样,如果下属任务有print()操作也将导致梯形进度条

from tqdm import tqdm
import multiprocessing
import time


def method_way1(data):
    # 模拟方法A的执行
    time.sleep(data)
    return f"Method1 sleep {data}"


def method_way2():
    # 模拟方法A的执行
    time.sleep(1)
    return f"Method2 sleep 1"


def method_way3():
    # 模拟方法A的执行
    time.sleep(2)
    return f"Method3 sleep 2"


# 使用tqdm显示进度条
def tqdm_multi(data, desc):
    # 使用tqdm显示进度条
    results = []
    with tqdm(total=100, desc=desc) as pbar:
        # 执行方法1
        result_1 = method_way1(data)
        results.append(result_1)
        pbar.update(40)  # 更新进度条

        # 执行方法2
        result_2 = method_way2()
        results.append(result_2)
        pbar.update(30)  # 更新进度条

        # 执行方法3
        result_3 = method_way3()
        results.append(result_3)
        pbar.update(30)  # 更新进度条

    print(results)


# 调用顺序执行方法的函数
if __name__ == "__main__":
    data = 4
    a = multiprocessing.Process(target=tqdm_multi, args=(data, 'proess A'))
    a.start()
    a.join()

    b = multiprocessing.Process(target=tqdm_multi, args=(data, 'proess B'))
    b.start()

         其实,考虑不在子方法里输出print()也可以,请君自便吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1554921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

环境温度对测量平板有什么影响

环境温度可以对测量平板有影响。温度变化可以导致平板的尺寸发生变化。根据热膨胀原理,当环境温度升高时,平板的尺寸会扩大;当环境温度降低时,平板的尺寸会缩小。这种尺寸变化可能会导致测量结果的误差。因此,在测量平…

9、jenkins微服务持续集成(一)

文章目录 一、流程说明二、源码概述三、本地部署3.1 SpringCloud微服务部署本地运行微服务本地部署微服务3.2 静态Web前端部署四、Docker快速入门一、流程说明 Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 开发人员每天把代码提交到Gitlab代码仓库Jenkins从G…

TouchGFX之文本区域

文本区域在屏幕上显示文本。 文本区域的文本在大小、颜色、自定义字体、动态文本等方面是完全可以配置的 #ifndef TOUCHGFX_TEXTAREA_HPP #define TOUCHGFX_TEXTAREA_HPP #include <touchgfx/Font.hpp> #include <touchgfx/TextProvider.hpp> #include <touchg…

JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…

标准库不带操作系统移植FreeModbus到STM32

添加FreeModbus代码 首先准备一个空白的标准库项目。 下载FreeModbus源码。 将源码中的modbus文件夹复制到项目路径下&#xff0c;并把demo->BARE->port文件夹的内容也添加进来。 新建一个文件port.c备用。然后打开项目&#xff0c;将上述文件添加至项目&#xff0c;…

OSPF---开放式最短路径优先协议

1. OSPF描述 OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系&#xff0c;并将已知的邻居列表和链路费用LSU报文描述&#xff0c;通过可靠的泛洪与自治系统AS内的其他路由器周期性交互&#xff0c;学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路…

Vscode 常用插件和快捷键 2024版笔记

1. 常用插件2.常用快捷键 1. 常用插件 1.1 Chinese vscode 转成中文&#xff08;更新版后有进要重装&#xff09; 1.2 Live Server 浏览成网页 1.3 Material Icon Theme 文件目录和文件图标样式&#xff08;没有自定义&#xff09; 1.4 vscode 主题 1.5 代码截图 1.6 代码补…

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【01-20】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求…

新能源充电桩站场AI视频智能分析烟火检测方案及技术特点分析

新能源汽车充电起火的原因多种多样&#xff0c;涉及技术、设备、操作等多个方面。从技术层面来看&#xff0c;新能源汽车的电池管理系统可能存在缺陷&#xff0c;导致电池在充电过程中出现过热、短路等问题&#xff0c;从而引发火灾。在设备方面&#xff0c;充电桩的设计和生产…

Python环境下基于机器学习的空压机故障识别(出口阀泄漏等)

Python环境下基于机器学习&#xff08;多层感知机&#xff0c;决策树&#xff0c;随机森林&#xff0c;高斯过程&#xff0c;AdaBoost&#xff0c;朴素贝叶斯&#xff09;的压缩机故障识别&#xff08;出口阀泄漏&#xff0c;止逆阀泄露&#xff0c;轴承损伤&#xff0c;惯性轮…

京东数据API接口采集/京东商品详情页SKU实时采集

京东电商实时数据采集是指通过自动化工具和技术&#xff0c;定时或不间断地收集京东电商平台的数据。这些数据可以包括商品信息、价格、销量、评价等。通过实时数据采集&#xff0c;可以帮助京东电商平台及其卖家了解市场情况、监控竞争对手、优化产品定价和营销策略等。 企业级…

C语言从入门到精通- CLion安装配置Gitee

CLion安装Gitee 需要先申请Gitee账号。 下载gitee插件 在CLion的plugins中查找gitee,安装后重启CLion。 CLion上关联gitee账号 安装git软件 下载git 访问网站&#xff1a; Git - Downloading Package (git-scm.com) 安装 创建本地用户名和邮箱 在弹出的命令行窗体中输入用户名…

vite+vue3使用模块化批量发布Mockjs接口

在Vue3项目中使用Mock.js可以模拟后端接口数据&#xff0c;方便前端开发和调试。下面是使用vitevue3使用模块化批量发布Mockjs接口的步骤&#xff1a; 1. 安装Mock.js 在Vue3项目的根目录下&#xff0c;使用以下命令安装Mock.js&#xff1a; npm install mockjs --save-dev …

constexpr与std::is_same_v碰撞会产生什么火花?

1. 只编译会用到的if分支 示例代码一中&#xff0c;checkType_v1和checkType_v2两个函数的区别就是if的条件里一个加了constexpr一个没加&#xff0c;加与不加从结果来看都一样&#xff0c;那在编译时和运行时各有什么区别呢&#xff1f; 示例代码一&#xff0c;test_01.cpp&…

canvas画图,拖动已经画好的矩形

提示&#xff1a;canvas画图写文字 文章目录 前言一、写文字总结 前言 一、写文字 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

【物联网】Qinghub opc-ua 连接协议

基础信息 组件名称 &#xff1a; opcua-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通过OPCUA连接网关&#xff0c;通过定时任务获取OPCUA相关的数据或通过执行指令控制设备相关参数。 配置文件&a…

基于spring boot的在线购票系统

在线购票系统的设计与实现 【摘要】这套在线购票系统是根据当前的现实需要&#xff0c;从现实工作中着手&#xff0c;剖析了以往的在线购票系统中出现的一些问题&#xff0c;并进一步提高了使用者的操作体验。利用电脑来对资料进行处理&#xff0c;以代替传统的手工方式进行资…

spring-boot之接口文档Swagger配置使用

Swagger 前后端分离 Vue SpringBoot 后端时代:前端只用管理静态页面; html> 后端。模板引擎JSP >后端是主力 前后端分离式时代: ●后端:后端控制层&#xff0c;服务层,数据访问层[后端团队] ●前端:前端控制层&#xff0c;视图层[前端团队] 。伪造后端数据&#xff0c;…

【保姆级】2024年最新Onlyfans使用订阅教程

【必看】开通步骤 订阅OnlyFans的步骤简要总结如下&#xff1a; 开通虚拟信用卡&#xff1a;虚拟信用卡开通使用教程。开卡后&#xff0c;进入首页&#xff0c;就能看到自己的虚拟信用卡信息把虚拟信用卡的信息填写到OnlyFans绑定信用卡界面就OK了 从上面的链接进入开卡费可…

Springboot工程依赖包与执行包分离打包与构建docker 镜像

文章目录 一、概述二、工程概况1. 代码原始结构2. 运行界面 三、常规打包1. 打包命令2. jar包结构 四、分离依赖包、执行包步骤1. 引入依赖包管理插件2. 打包验证 一、概述 某大数据项目&#xff0c;使用springboot常规打包方式&#xff0c;打出来的一体化执行包达几百兆&…