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



    简介

    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()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

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

    多进度条渲染

        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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

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

    小结

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

  • 相关阅读:
    文献阅读(207)FPGA HBM
    Python基础tuple元组定义与函数
    特征值和特征向量及其在机器学习中的应用
    二、TensorFlow结构分析(1)
    DVWA靶场Medium难度部分解析
    Vue3详解
    PTrade获取交易日期——时间相关函数1
    Web前端学习(HTML)学习---下(表格标签,列表标签,表单标签)案例
    年中上线,工资核算中怎么处理累计工资项?
    Vue组件间传值
  • 原文地址:https://blog.csdn.net/zhanggqianglovec/article/details/127987974