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,一经查实,立即删除!

相关文章

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

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

等级保护 总结2

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

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

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

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

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

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项目启动的解释…

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…

1207. 有趣的数字图形IV

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

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

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

C++图书管理系统

目录 实现功能 用户管理 图书管理 借阅与归还 未归还图书 部分效果图 结构体 Book 结构体 User 结构体 源代码 编译时在连接器命令行加入 完整代码 实现功能 用户管理 添加用户:输入用户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…

AI绘画入门实践|Midjourney:使用 --seed 制作情侣头像与漫画

在 Midjourney 中&#xff0c;seed 是指一个种子&#xff0c;用于生成图像时的起点或基础。 使用格式&#xff1a;--seed 获取的seed值 获取 seed 值 使用 seed 生成图像 a cute boys avatar, background with blue sky and white cloud, Ghibli Studio style, Hayao Miyazaki…

智能爬虫管理:定制化数据抓取方案为企业赋能

摘要&#xff1a; 在数据驱动的时代&#xff0c;精准而高效的数据抓取成为企业决策的命脉。本文将探讨如何通过定制化的智能爬虫管理方案&#xff0c;赋能企业实现数据洞察力的飞跃。我们将深入解析定制化数据抓取的核心优势&#xff0c;分享成功案例&#xff0c;并揭秘如何利…

InteliJ IDEA最新2024版下载安装与快速配置激活使用教程+jdk下载配置

第一步&#xff1a;下载ideaIC-2024.1.4 方法1&#xff1a;在线链接 IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 选择社区版进行下载 方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ydS6krUX6eE_AdW4uGV_6w?pwdsbfm 提取…

vue3+g2plot实现词云图

词云图 效果预览: 核心代码: import {WordCloud } from @antv/g2plot;fetch(https://gw.alipayobjects.com/os/antfincdn/jPKbal7r9r/mock.json).then((res) => res.json()).then((data) => {const wordCloud = new WordCloud(container, {data,wordField: x,weigh…

电场、磁场、麦克斯韦方程组

电场和磁场 电场和磁场并不是一个虚拟的概念&#xff0c;而是一种确实存在的物质。法拉第提出了电场和磁场&#xff0c;法拉第认为之所以两个电荷之间有力的作用,是因为有一个电荷会在周围空间产生一种物质,这种物质叫做电场。法拉第提出&#xff1a;电场是由电荷产生的。之后人…

【笔记:3D航路规划算法】二、RRT*

目录 一、RRT*于RRT的不同之处1、路径优化&#xff1a;2、成本计算&#xff1a;3、重连线步骤&#xff1a; 二、图解1、初始化2、路径搜索3、效果展示 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、虚拟现实…