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

前言

        在处理大量数据或执行耗时操作时,了解代码执行的进度是至关重要的。在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 timedef 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:# 执行方法Aresult_A = method_A()results.append(result_A)pbar.update(30)  # 更新进度条# 执行方法Bresult_B = method_B()results.append(result_B)pbar.update(30)  # 更新进度条# 执行方法Cresult_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 timedef 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:# 执行方法1result_1 = method_way1(data)results.append(result_1)pbar.update(40)  # 更新进度条# 执行方法2result_2 = method_way2()results.append(result_2)pbar.update(30)  # 更新进度条# 执行方法3result_3 = method_way3()results.append(result_3)pbar.update(30)  # 更新进度条print(results)# 调用顺序执行方法的函数
if __name__ == "__main__":data = 4a = 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.mzph.cn/news/777392.shtml

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

相关文章

用Python机器学习模型预测世界杯结果靠谱吗?

看到kaggle、medium上有不少人用球队的历史数据来进行建模预测,比如用到泊松分布、决策树、逻辑回归等算法,很大程度上能反映强者恒强的现象,比如巴西、英格兰等大概率能进8强,就像高考模拟考试成绩越好,大概率高考也会…

Spring高级面试题-2024

Spring 框架中都用到了哪些设计模式? 1. 简单工厂: ○ BeanFactory:Spring的BeanFactory充当工厂,负责根据配置信息创建Bean实例。它是一种工厂模式的应用,根据指定的类名或ID创建Bean对象。2. 工厂方法&#xff…

爬取肯德基餐厅查询中指定地点的餐厅数据

进入肯德基官网 代码编写 import requests import jsonif __name__ __main__:get_url http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opkeywordheaders {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1…

开源AI引擎:利用影像处理与目标检测技术对违章建筑排查

一、项目案例介绍 随着城市化进程的加快,城市规划和管理工作面临着前所未有的挑战,违章建筑的排查与处理成为了城市管理中的一项重要任务。传统的违章建筑排查方法依赖于人力巡查,效率低下且难以全面覆盖。为了解决这一问题,现代…

Webgl学习系列-Webgl 入门

Webgl学习系列 第二章 Webgl 入门 文章目录 一、最短的webgl程序二、通过webgl绘制一个点三、webgl三维坐标 一、最短的webgl程序 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>…

【python基础教程】2. 算法的基本要素与特性

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;python基础教程 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、…

docker 部署 gitlab-ce 16.9.1

文章目录 [toc]拉取 gitlab-ce 镜像创建 gitlab-ce 持久化目录启停脚本配置配置 gitlab-ce编辑 gitlab-ce 配置文件重启 gitlab-ce配置 root 密码 设置中文 gitlab/gitlab-ce(需要科学上网) 拉取 gitlab-ce 镜像 docker pull gitlab/gitlab-ce:16.9.1-ce.0查看镜像是不是有 Vo…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…

嵌入式软件工程师都需要安装哪些软件

文章目录 一、编程软件1.keil2.vscode①Chinese&#xff1a;中文②C/C、C/C Extension Pack③CMake、CMake Tools等代码调试运行的工具④Remote-SSH等&#xff0c;关于远程登录linux服务器的插件 3.Pycharm和Anaconda&#xff0c;用来写python脚本和配置环境&#xff0c;PYQT上…

损坏的RAID5csp

1.解题思路 这道题太抽象了&#xff0c;一开始都没太搞懂在讲啥。。。解决该题需要了解条带、磁盘号的定义。 下图以样例2&#xff0c;输入编号为5的块为例&#xff1a; 请务必加上ios::sync_with_stdio(false),否则会超时只有30分 2.满分代码 #include<iostream> us…

ocr之opencv配合paddleocr提高识别率

背景1&#xff1a;在这篇文章编写之前使用到的工具并不是opencv&#xff0c;而是java原有的工具BufferedImage。但因为在使用过程中会频繁切图&#xff0c;放大&#xff0c;模糊&#xff0c;所以导致的jvm内存使用量巨大&#xff0c;分秒中都在以百兆的速度累加内存空间。这种情…

大数据开发扩展shell--尚硅谷shell笔记

大数据开发扩展shell 学习目标 1 熟悉shell脚本的原理和使用 2 熟悉shell的编程语法 第一节 Shell概述 1&#xff09;Linux提供的Shell解析器有&#xff1a; 查看系统中可用的 shell [atguiguhadoop101 ~]$ cat /etc/shells /bin/sh/bin/bash/sbin/nologin/bin/dash/bin/t…

java日志技术——Logback日志框架安装及概述

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! 日志 什么是日志 程序中的日志&#xff0c;通常就是一个文件&#xff0c;里面记录的是程序运行过程中的各种信息&#xff0c;通过日志可以进行操作分析&#xff0c;bug定位等 记录日志的方案 程…

构建一个包含mvn命令的Java 17基础镜像

前言 官方提供的openjdk基础镜像&#xff0c;不包含mvn命令&#xff0c;无法用容器来打包代码。 在官方提供的镜像基础上安装maven。 前期准备&#xff0c;需要安装好docker。 一、安装maven 1、下载openjdk基础镜像&#xff0c;执行如下代码。 docker pull openjdk:17-j…

Linux 进程信号:产生信号

目录 一、通过终端按键产生信号 1、signal()函数 2、核心转储 3、ulmit命令 二、调用系统函数向进程发信号 1、kill()函数 2、raise()函数 3、abort()函数 三、发送信号的过程 读端关闭、写端继续写入的情况 如何理解软件条件给进程发送信号: 四、软件条件产生信…

伦敦金与纸黄金有什么区别?怎么选?

伦敦金与纸黄金都是与黄金相关的投资品种&#xff0c;近期黄金市场的上涨吸引了投资者的关注&#xff0c;那投资者想开户入场成为黄金投资者应该选择纸黄金还是伦敦金呢&#xff1f;两者有何区别呢&#xff1f;下面我们就来讨论一下。 伦敦金是一种起源于伦敦的标准化黄金交易合…

HarmonyOS实战开发-实现带有卡片的电影应用

介绍 本篇Codelab基于元服务卡片的能力&#xff0c;实现带有卡片的电影应用&#xff0c;介绍卡片的开发过程和生命周期实现。需要完成以下功能&#xff1a; 元服务卡片&#xff0c;用于在桌面上添加2x2或2x4规格元服务卡片。关系型数据库&#xff0c;用于创建、查询、添加、删…

FMEA的本质——FMEA软件

免费试用FMEA软件-免费版-SunFMEA FMEA&#xff0c;即故障模式与影响分析&#xff08;Failure Modes and Effects Analysis&#xff09;&#xff0c;是一种预防性的质量工具&#xff0c;广泛应用于各种行业和领域&#xff0c;特别是在制造业、航空航天、医疗设备、汽车工业等领…

AGV全电动无人堆高车选购时要注意的4点

AGV 随着机器人技术在中国的快速发展&#xff0c;国内企业开始推出区别于传统叉车的无人叉车&#xff0c;旨在为企业降本增效&#xff0c;降低人工成本与对人的依赖。同时&#xff0c;也将人工从危险恶劣的环境中解放出来。随着技术的持续提升&#xff0c;如今&#xff0c;无人…

DVB-S系统仿真学习

DVB-S系统用于卫星电视信号传输&#xff0c;发送端框图如下所示 扰码 实际数字通信中&#xff0c;载荷数据的码元会出现长连0或长连1的情况&#xff0c;不利于接收端提取时钟信号&#xff0c;同时会使得数据流中含有大量的低频分量&#xff0c;使得QPSK调制器的相位长时间不变…