Go:进度条工具库 vbauerster/mpb 简介

news2024/11/26 12:32:31

文章目录

    • 简介
    • 核心能力
    • 示例
      • 单进度条渲染
      • 多进度条渲染
    • 小结


简介

mpb是一个在终端进行进度条渲染的工具库

核心能力

  • 支持多进度条
    Multiple Bars: Multiple progress bars are supported
  • 支持动态设置进度条总值
    Dynamic Total: Set total while bar is running
  • 支持动态增加 / 删除进度条
    Dynamic Add/Remove: Dynamically add or remove bars
  • 支持在渲染过程中取消进度条渲染
    Cancellation: Cancel whole rendering process
  • 支持预定义修饰符,包括运行时间,百分比,计数器等
    Predefined Decorators: Elapsed time, ewma based ETA, Percentage, Bytes counter
  • 支持异步调整多进度条的长度
    Decorator’s width sync: Synchronized decorator’s width among multiple bars

示例

单进度条渲染

package main

import (
    "math/rand"
    "time"

    "github.com/vbauerster/mpb/v8"
    "github.com/vbauerster/mpb/v8/decor"
)

func main() {
    // initialize progress container, with custom width
    p := mpb.New(mpb.WithWidth(64))

    total := 100
    name := "Single Bar:"
    // create a single bar, which will inherit container's width
    bar := p.New(int64(total),
        // BarFillerBuilder with custom style
        mpb.BarStyle().Lbound("╢").Filler("▌").Tip("▌").Padding("░").Rbound("╟"),
        mpb.PrependDecorators(
            // display our name with one space on the right
            decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}),
            // replace ETA decorator with "done" message, OnComplete event
            decor.OnComplete(
                decor.AverageETA(decor.ET_STYLE_GO, decor.WC{W: 4}), "done",
            ),
        ),
        mpb.AppendDecorators(decor.Percentage()),
    )
    // simulating some work
    max := 100 * time.Millisecond
    for i := 0; i < total; i++ {
        time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10)
        bar.Increment()
    }
    // wait for our bar to complete and flush
    p.Wait()
}

执行结果:
在这里插入图片描述

多进度条渲染

    var wg sync.WaitGroup
    // passed wg will be accounted at p.Wait() call
    p := mpb.New(mpb.WithWaitGroup(&wg))
    total, numBars := 100, 3
    wg.Add(numBars)

    for i := 0; i < numBars; i++ {
        name := fmt.Sprintf("Bar#%d:", i)
        bar := p.AddBar(int64(total),
            mpb.PrependDecorators(
                // simple name decorator
                decor.Name(name),
                // decor.DSyncWidth bit enables column width synchronization
                decor.Percentage(decor.WCSyncSpace),
            ),
            mpb.AppendDecorators(
                // replace ETA decorator with "done" message, OnComplete event
                decor.OnComplete(
                    // ETA decorator with ewma age of 60
                    decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WCSyncWidth), "done",
                ),
            ),
        )
        // simulating some work
        go func() {
            defer wg.Done()
            rng := rand.New(rand.NewSource(time.Now().UnixNano()))
            max := 100 * time.Millisecond
            for i := 0; i < total; i++ {
                // start variable is solely for EWMA calculation
                // EWMA's unit of measure is an iteration's duration
                start := time.Now()
                time.Sleep(time.Duration(rng.Intn(10)+1) * max / 10)
                // we need to call EwmaIncrement to fulfill ewma decorator's contract
                bar.EwmaIncrement(time.Since(start))
            }
        }()
    }
    // wait for passed wg and for all bars to complete and flush
    p.Wait()

运行结果:
在这里插入图片描述

小结

参考地址: https://github.com/vbauerster/mpb

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

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

相关文章

【Unity Shader】屏幕后处理4.0:基于高斯模糊的Bloom

原本打算写高斯模糊和双重模糊两个实现Bloom方法的对比&#xff0c;但两个加在一起篇幅过长&#xff0c;于是拆成两篇文章来进行。 学习前建议应先搞清楚的几个概念 HDRLDRToneMapping几种模糊算法1 高斯模糊实现Bloom 最近一直在学习Unity Shader实现各种后处理效果&#x…

c++ - 第13节 - c++中的继承

1.继承的概念及定义 面向对象三大特性&#xff1a;封装、继承、多态注&#xff1a;面向对象不止这三个特性&#xff0c;还有其他特性&#xff0c;比如反射&#xff08;Java中的概念&#xff09;、抽象等封装的理解&#xff1a;&#xff08;1&#xff09;将c设计的stack类&#…

记一次艰难的上班历程

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 以下事件均为卢松松真实经历&#xff1a; 早上7点&#xff0c;小区又被静默了&#xff0c;几百号人堵在小区门口。 我不顾病毒传染的风险挤到了小区门口&#xff0c;问原因。 看门的说到&#x…

pumping lemma

正规语言版本 LLL是正规语言,则存在整数p≥1p\ge 1p≥1 对于任意长度大于等于ppp的字符串w∈Lw\in Lw∈L&#xff0c;wxyzwxyzwxyz,满足下面3个条件 ∣y∣≥1\left|y\right|\ge 1∣y∣≥1 ∣xy∣≤p\left|xy\right|\le p∣xy∣≤p ∀n≥0,xynz∈L\forall n\ge 0,xy^nz\in L∀n≥…

1997-2020年各省三废排放量和熵值法计算的环境规制综合指数(无缺失值)

1997-2020年各省三废排放量和环境规制综合指数 1、包括&#xff1a;30个省份 2、指标包括&#xff1a;工业二氧化硫排放量、工业烟尘排放量和工业废水排放量 环境规制综合指数是由工业废水排放量、工业 SO2 排放量以及工业烟尘排放量计算而来 &#xff08;表格中有详细的三…

网络流量监测与调度技术研究

网络流量监测与调度技术研究网络流量监测与调度技术研究学习目标&#xff1a;流量监测学习内容&#xff1a;流量监测流量监测的设计框架框架一框架二框架三申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计…

零基础上手unity VR开发【Oculus账号体系准备】

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;Unity VR 开发成神之路 --【着重解决VR项目开发难&#xff0c;国内资料匮乏的问题。从零入门&#xff0c;一步一个脚印&#xff0c;带你搞定VR开发! &#x1f63b;&#x1f63b;】 &#x1f4d…

大数的乘法

输入一个大正整数和一个非负整数&#xff0c;求它们的积。 输入格式: 测试数据有多组&#xff0c;处理到文件尾。每组测试输入1个大正整数A&#xff08;位数不会超过1000&#xff09;和一个非负整数B&#xff08;int范围&#xff09;。 输出格式: 对于每组测试&#xff0c;…

[Leetcode刷题] - LC003 Longest Substring without repating character

题目链接 Leetcode 003Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目描述 给定…

数字先锋 | 随时随地云端阅片,“云胶片”时代来啦!

作为现代医疗必不可少的诊断方法&#xff0c;医学影像数据在医疗数据中的占比高达90%且正以每年30%的速度递增&#xff0c;而影像医生就业人数年增长率仅4%。这意味着&#xff0c;全国总人数不到20万的放射科医生&#xff0c;要处理每年75.4亿人次影像相关诊断需求&#xff0c;…

代理模式-P19

静态代理&#xff1a; 创建项目&#xff1a; Rent package com.Li.demo01;//租房 public interface Rent {public void rent(); }Proxy&#xff1a; package com.Li.demo01; //中介&#xff08;负责找房东&#xff09; public class Proxy implements Rent{//private Host h…

Redis安装及使用(WindowsLinux)

Windows 1.下载 下载地址&#xff1a;Releases tporadowski/redis GitHub。 目前最新5.0.14 2.解压 3.先后打开redis-server.exe和redis-cli.exe两个文件&#xff08;一定要按顺序&#xff09; 4.使用 正常使用在redis-cli.exe里面输入各种命令&#xff08;使用期间redis…

7、系统管理

文章目录7、系统管理7.1 Linux 中的进程和服务7.2 service 服务管理&#xff08;CentOS 6 版本-了解&#xff09;7.2.1 基本语法7.2.2 经验技巧7.2.3 案例实操&#xff08;1&#xff09;查看网络服务的状态&#xff08;2&#xff09;停止网络服务&#xff08;3&#xff09;启动…

基于JAVA的个人博客论坛系统的设计与实现参考【数据库设计、源码、开题报告】

在学校开发搭建一个什么项目最有成就感&#xff0c;那肯定就是搭建「个人博客」呀&#xff0c;然后把自己平时的学习笔记写到博客里&#xff0c;这时你的笔记就是**云笔记**&#xff0c;就再也不会出现因为本地文件丢失而感到痛心的事情。 而且&#xff0c;还可以把你的个人博客…

艾美捷小鼠肿瘤坏死因子α-ELISpot试剂盒使用说明

肿瘤坏死因子-α 肿瘤坏死因子-α&#xff08;TNF-α&#xff0c;也称为TNF-α、TNF-a、TNF-a和肿瘤坏死因子α&#xff09;由许多不同的细胞类型产生&#xff0c;例如单核细胞、巨噬细胞、T细胞和B细胞。TNF-α的许多作用包括保护细菌感染、细胞生长调节、免疫系统调节和感染…

Kotlin 使用vararg可变参数

文章目录背景Kotlin中使用可变参数对Kotlin可变参数反编译资料背景 一般在项目开发中&#xff0c;我们经常会在关键节点上埋点&#xff0c;而且埋点中会增加一些额外参数&#xff0c;这些参数通常是成对出现且参数个数是不固定的。如下&#xff1a; //定义事件EVENT_ID const…

云原生|kubernetes |使用Prometheus监控k8s cAdvisor篇(一)(centos)

前言: 为了能够提前发现kubernetes集群的问题以及方便快捷的查询容器的各类参数&#xff0c;比如&#xff0c;某个pod的内存使用异常高企 等等这样的异常状态&#xff08;虽然kubernetes有自动重启或者驱逐等等保护措施&#xff0c;但万一没有配置或者失效了呢&#xff09;&am…

PAM exec模块监控服务器ECS登录用户及IP,触发登录后,发送至钉钉

PAM 模块pam_exec &#xff0c;用于运行外部命令 PAM 项作为环境变量导出&#xff1a;* PAM_RHOST &#xff0c; PAM_RUSER &#xff0c; PAM_SERVICE &#xff0c; PAM_TTY &#xff0c; PAM_USER 和 PAM_TYPE *&#xff0c;其中包含以下模块类型之一&#xff1a;account&…

【深度学习】实验5布置:滴滴出行-交通场景目标检测

DL_class 学堂在线《深度学习》实验课代码报告&#xff08;其中实验1和实验6有配套PPT&#xff09;&#xff0c;授课老师为胡晓林老师。课程链接&#xff1a;https://www.xuetangx.com/training/DP080910033751/619488?channeli.area.manual_search。 持续更新中。 所有代码…

电脑c盘分区太小如何可以扩大,电脑c盘不够用了,如何给电脑分区

C盘是很重要的系统盘&#xff0c;会影响到整个系统的正常化运行。如果电脑c盘分区太小如何可以扩大&#xff1f; 一、清理C盘的垃圾文件 C盘分区不足的原因之一就是因为C盘的垃圾文件没有及时清理&#xff0c;导致垃圾文件越来越多&#xff0c;电脑越来越卡&#xff0c;所以&a…