All Projects → vbauerster → Mpb

vbauerster / Mpb

Licence: unlicense
multi progress bar for Go cli applications

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Mpb

Alive Progress
A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!
Stars: ✭ 2,940 (+140.79%)
Mutual labels:  cli, terminal, progress-bar, spinner
Spinner
Go (golang) package with 90 configurable terminal spinner/progress indicators.
Stars: ✭ 1,637 (+34.07%)
Mutual labels:  cli, terminal, spinner, progress-bar
Progress bar
Command-line progress bars and spinners for Elixir.
Stars: ✭ 281 (-76.99%)
Mutual labels:  cli, terminal, progress-bar, spinner
Python Progressbar
Progressbar 2 - A progress bar for Python 2 and Python 3 - "pip install progressbar2"
Stars: ✭ 682 (-44.14%)
Mutual labels:  cli, terminal, progress-bar
Ruby Progressbar
Ruby/ProgressBar is a text progress bar library for Ruby.
Stars: ✭ 1,378 (+12.86%)
Mutual labels:  cli, terminal, progress-bar
Php Console Spinner
Colorful highly configurable spinner for php cli applications (suitable for async apps)
Stars: ✭ 225 (-81.57%)
Mutual labels:  cli, terminal, spinner
Tqdm
A Fast, Extensible Progress Bar for Python and CLI
Stars: ✭ 20,632 (+1589.76%)
Mutual labels:  cli, terminal, progress-bar
Yaspin
A lightweight terminal spinner for Python with safe pipes and redirects 🎁
Stars: ✭ 413 (-66.18%)
Mutual labels:  cli, terminal, spinner
Spinnercpp
Simple header only library to add a spinner / progress indicator to any terminal application.
Stars: ✭ 37 (-96.97%)
Mutual labels:  cli, terminal, spinner
Taskline
Tasks, boards & notes for the command-line habitat
Stars: ✭ 78 (-93.61%)
Mutual labels:  cli, terminal
Fsq
A tool for querying the file system with a SQL-like language.
Stars: ✭ 60 (-95.09%)
Mutual labels:  cli, terminal
Sub Tv Cli
Downloading your series subtitles via terminal 📺
Stars: ✭ 63 (-94.84%)
Mutual labels:  cli, terminal
Tty Prompt
A beautiful and powerful interactive command line prompt
Stars: ✭ 1,210 (-0.9%)
Mutual labels:  cli, terminal
Http Prompt
An interactive command-line HTTP and API testing client built on top of HTTPie featuring autocomplete, syntax highlighting, and more. https://twitter.com/httpie
Stars: ✭ 8,329 (+582.15%)
Mutual labels:  cli, terminal
Rtscli
Python CLI Stocks Ticker + Portfolio Tracker
Stars: ✭ 61 (-95%)
Mutual labels:  cli, terminal
Spotify Tui
Spotify for the terminal written in Rust 🚀
Stars: ✭ 11,061 (+805.9%)
Mutual labels:  cli, terminal
Reminders Cli
Command-line interface to interact with the Reminders.app
Stars: ✭ 67 (-94.51%)
Mutual labels:  cli, terminal
Cross Platform Node Guide
📗 How to write cross-platform Node.js code
Stars: ✭ 1,161 (-4.91%)
Mutual labels:  cli, terminal
Nord Konsole
An arctic, north-bluish clean and elegant Konsole color scheme.
Stars: ✭ 56 (-95.41%)
Mutual labels:  cli, terminal
Ginseng
C++ REPL Tool Builder
Stars: ✭ 65 (-94.68%)
Mutual labels:  cli, terminal

Multi Progress Bar

GoDoc Build Status Go Report Card

mpb is a Go lib for rendering progress bars in terminal applications.

Features

  • 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

Usage

Rendering single bar

package main

import (
    "math/rand"
    "time"

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

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

    total := 100
    name := "Single Bar:"
    // adding a single bar, which will inherit container's width
    bar := p.Add(int64(total),
        // progress bar filler with customized style
        mpb.NewBarFiller("╢▌▌░╟"),
        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()
}

Rendering multiple bars

    var wg sync.WaitGroup
    // pass &wg (optional), so p will wait for it eventually
    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), "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)
                bar.Increment()
                // we need to call DecoratorEwmaUpdate to fulfill ewma decorator's contract
                bar.DecoratorEwmaUpdate(time.Since(start))
            }
        }()
    }
    // Waiting for passed &wg and for all bars to complete and flush
    p.Wait()

Dynamic total

dynamic total

Complex example

complex

Bytes counters

byte counters

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].