python使用rich.progress打印彩色进度条

常规的同步方法和for循环的进度,使用tqdm能很直观地展示进度;而一些异步协程或难以预估进度的,可以考虑使用rich.progress

Ref: https://typer.tiangolo.com/tutorial/progressbar/#progress-bar

案例一:左侧展示旋转的小圈圈

from contextlib import contextmanager
from typing import Generator# pip install asynctor httpx rich
import asynctor
import httpx
from rich.progress import Progress, SpinnerColumn@contextmanager
def progressbar(msg: str, color: str = "cyan", transient=False
) -> Generator[None, None, None]:"""Spinner风格的七彩进度条:param msg: 进度条描述文字:param color: 颜色,如:'blue':param transient: 任务完成后是否清除进度条信息"""with Progress(SpinnerColumn(), *Progress.get_default_columns(), transient=transient) as progress:progress.add_task(f"[{color}]{msg}...", total=None)yield@asynctor.timeit
async def fetch(url) -> int:async with httpx.AsyncClient(verify=False, follow_redirects=True) as client:r = await client.get(url)return r.status_codeasync def main():url = "https://pypi.org"with progressbar(f"Fetching {url}"):status_code = await fetch(url)print(f"{status_code = }")url = "https://fastapi.tiangolo.com/"with progressbar(f"Fetching {url}", color="green", transient=True):status_code = await fetch(url)print(f"{url = }; {status_code = }")if __name__ == "__main__":asynctor.run(main)

效果如下:

案例二:展示百分比 

#!/usr/bin/env python
from contextlib import asynccontextmanager
from typing import AsyncGenerator# pip install asynctor httpx rich
import anyio
import asynctor
import httpx
from rich.progress import Progress@asynccontextmanager
async def percentbar(msg: str, seconds=5, color: str = "cyan", transient=False
) -> AsyncGenerator[None, None]:"""Spinner风格的七彩进度条:param msg: 进度条描述文字:param seconds: 任务总时长:param color: 颜色,如:'blue':param transient: 任务完成后是否清除进度条信息"""total = seconds * 100async def play(progress, task, expected=1 / 2, thod=0.8):# 改变进度条速率,前面1/2的时间完成80%的进度cost = seconds * expectedquick = int(total * thod)delay = cost / quickfor i in range(quick):await anyio.sleep(delay)progress.advance(task)cost = seconds - costslow = total - quickdelay = cost / slowfor i in range(slow):await anyio.sleep(delay)progress.advance(task)with Progress(transient=transient) as progress:task = progress.add_task(f"[{color}]{msg}:", total=total)async with anyio.create_task_group() as tg:tg.start_soon(play, progress, task)yieldtg.cancel_scope.cancel()progress.update(task, completed=total)@asynctor.timeit
async def fetch(url: str, timeout: int = 5) -> int:async with httpx.AsyncClient(timeout=timeout, verify=False, follow_redirects=True) as client:r = await client.get(url)return r.status_codeasync def main() -> None:url = "https://pypi.org/search/?q=asynctor"async with percentbar(f"Fetching {url}"):status_code = await fetch(url)print(f"{status_code = }")url = "https://fastapi.tiangolo.com/"async with percentbar(f"Fetching {url}", seconds=8, color="green", transient=True):status_code = await fetch(url, timeout=8)print(f"{url = }; {status_code = }")if __name__ == "__main__":asynctor.run(main)

效果如下:

建议耗时比较短,三秒内能搞定的,用spinner;需长时间等待的,用percentbar。

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

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

相关文章

设计模式SOLID原则

在Java编程中,SOLID原则是一组被广泛接受和应用的面向对象设计原则,旨在提高软件设计的灵活性、可维护性和可扩展性。这五个原则分别是: 1. 单一责任原则(Single Responsibility Principle, SRP) 定义:一…

机器学习(二十):偏差和方差问题

一、判断偏差和方差 以多项式回归为例,红点为训练集数据,绿点为交叉验证数据。 下图的模型,训练集误差大,交叉验证集误差大,这代表偏差很大 下图的模型,训练集误差小,交叉验证集误差小&#x…

等级保护 总结2

网络安全等级保护解决方案的主打产品: HiSec Insight安全态势感知系统、 FireHunter6000沙箱、 SecoManager安全控制器、 HiSecEngine USG系列防火墙和HiSecEngine AntiDDoS防御系统。 华为HiSec Insight安全态势感知系统是基于商用大数据平台FusionInsight的A…

外卖霸王餐系统架构怎么选?

在当今日益繁荣的外卖市场中,外卖霸王餐作为一种独特的营销策略,受到了众多商家的青睐。然而,要想成功实施外卖霸王餐活动,一个安全、稳定且高效的架构选择至关重要。本文将深入探讨外卖霸王餐架构的选择,以期为商家提…

AI绘画进阶工具 ComfyUI 新版来啦!操作界面详解!取消悬浮面板,自带工作流管理功能!(附安装包)

大家好,我是画画的小强 在 7 月初的一次更新中,ComfyUI 官方推出了 Beta 版 UI,取消了原本的悬浮面板,还新增了工作流管理功能,整体使用体验比之前好了很多。今天就为大家详细介绍一些新版 UI 的特点和用法。 一、启…

iOS中的MVVM设计模式

目录 前言 一、MVVM简介 二、MVVM的核心思想 三、MVVM的优势 四、MVVM在iOS中的实现 1. 创建Model 2. 创建ViewModel 3. 创建View 4. 主入口 总结 前言 随着iOS开发的发展,构建可维护和可扩展的代码架构变得至关重要。Model-View-ViewModel (MVVM) 是一种…

【STM32】超声波一般常用哪两个引脚?

在STM32单片机中,超声波模块HC-SR04通常使用PA6和PA7引脚进行驱动。 在STM32单片机上使用HC-SR04超声波模块时,常用的引脚是PA6和PA7。其中,PA6用于发送触发信号到Trig引脚,而PA7用于接收Echo引脚的回响信号。这两个引脚通过适当的…

pdf2image:将PDF文档转化为图像的Python魔法

标题:探索pdf2image:将PDF文档转化为图 像的Python魔法 背景 在数字时代,我们经常需要处理各种格式的文档,尤其是PDF文件。PDF以其跨平台的可读性和稳定性而广受欢迎。然而,有时我们需要将PDF文件转换成图像格式&am…

springboot3-web-questions-分析

系列文章目录 文章目录 目录 系列文章目录 文章目录 前言 一、问题案例 1、maven项目compile时候出现告警warn 2、java文件打包然后在命令行中运行java会找不到主类 3、程序找不到数据库驱动和配置实例 4、springboot和mybatis-plus版本不兼容导致 5、springboot项目启动的解释…

sklearn中的增量学习:特征提取的艺术

sklearn中的增量学习:特征提取的艺术 在机器学习领域,特征提取是构建有效模型的关键步骤。然而,并非所有数据集都适合一次性加载到内存中进行处理,尤其是在处理大规模数据集时。Scikit-learn(sklearn)提供…

21、Python之面向对象:一切皆对象,可你真的需要面向对象吗

引言 面向对象(Object-Oriented Programming, OOP)和面向过程(Procedural Programming)是两种不同的编程范式。不能因为我们接下来要进入“面向对象”的模块的学习,就武断地说,面向对象一定比面向过程好。…

若依 ruoyi poi Excel合并行的导入

本文仅针对文字相关的合并做了处理 ,图片合并及保存需要另做处理!! 目标:Excel合并行内容的导入 结果: 1. ExcelUtil.java 类,新增方法:判断是否是合并行 /*** 新增 合并行相关代码:…

【MySQL篇】Percona XtraBackup标准化全库完整备份策略(第三篇,总共五篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

计网_数据通信基础知识

2024.07.05:计算机网络数据通信基础知识学习笔记 第2节 数据通信基础知识 2.1 物理层特性(学会区分)2.2 信道相关的基本概念2.2.1 数字信号的(基带调制)(1)不归零NRZ编码(2&#xff…

大模型日报 2024-07-25

大模型日报 2024-07-25 大模型资讯 Meta发布开源AI模型Llama 3.1 405B 摘要: Meta于周二宣布推出Llama 3.1 405B,这是一款大型语言模型,旨在与Anthropic、谷歌和OpenAI的顶级模型竞争。 Meta发布全球最大AI模型Llama 3.1 405B 摘要: Meta今日发布了其迄今…

在Typescript + Pinia 中使用 Actions

文件准备 type.ts import type { PiniaCustomProperties, StateTree, StoreDefinition, _GettersTree, _StoreWithGetters, _StoreWithState } from pinia; import type { UnwrapRef } from vue;/**构建 Actions */ type CreateActions<Id extends string, S extends StateT…

1207. 有趣的数字图形IV

问题描述 输入一个整数 &#x1d45b; &#xff08; &#x1d45b;≤12 &#xff09;&#xff0c;打印出如下要求的方阵&#xff1a; 除掉右上到左下对角线上的数外的右下半个区域中每个元素等于左边的和上面的元素之和。每个元素场宽为 5 。左上半个区域为空。 输入 一个整…

C语言------指针讲解(3)

一、字符指针 在指针中&#xff0c;我们知道有一类指针类型为字符指针char*; int main() {char ch w;char* pc &ch;*pc w;return 0; } 还有一种使用方式如下&#xff1a; 上述代码中&#xff0c;本质是把hello的首字符的地址放到了pstr中。即把一个常量字符串的首字符…

C++图书管理系统

目录 实现功能 用户管理 图书管理 借阅与归还 未归还图书 部分效果图 结构体 Book 结构体 User 结构体 源代码 编译时在连接器命令行加入 完整代码 实现功能 用户管理 添加用户&#xff1a;输入用户ID、用户名和密码…

【LeetCode】71.简化路径

1. 题目 2. 分析 3. 代码 我写了一版很复杂的代码&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:operator [] # 操作符的栈dir_name [] # 文件名的栈idx 0cur_dir_name ""while(idx < len(path)):if path[idx] /:operator.ap…