Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

multi progress bar for Go cli applications

License

NotificationsYou must be signed in to change notification settings

vbauerster/mpb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoDocTest statusLint status

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

package mainimport ("math/rand""time""github.com/vbauerster/mpb/v8""github.com/vbauerster/mpb/v8/decor")funcmain() {// initialize progress container, with custom widthp:=mpb.New(mpb.WithWidth(64))total:=100name:="Single Bar:"// create a single bar, which will inherit container's widthbar:=p.New(int64(total),// BarFillerBuilder with custom stylempb.BarStyle().Lbound("╢").Filler("▌").Tip("▌").Padding("░").Rbound("╟"),mpb.PrependDecorators(// display our name with one space on the rightdecor.Name(name, decor.WC{C:decor.DindentRight|decor.DextraSpace}),// replace ETA decorator with "done" message, OnComplete eventdecor.OnComplete(decor.AverageETA(decor.ET_STYLE_GO),"done"),        ),mpb.AppendDecorators(decor.Percentage()),    )// simulating some workmax:=100*time.Millisecondfori:=0;i<total;i++ {time.Sleep(time.Duration(rand.Intn(10)+1)*max/10)bar.Increment()    }// wait for our bar to complete and flushp.Wait()}
varwg sync.WaitGroup// passed wg will be accounted at p.Wait() callp:=mpb.New(mpb.WithWaitGroup(&wg))total,numBars:=100,3wg.Add(numBars)fori:=0;i<numBars;i++ {name:=fmt.Sprintf("Bar#%d:",i)bar:=p.AddBar(int64(total),mpb.PrependDecorators(// simple name decoratordecor.Name(name),// decor.DSyncWidth bit enables column width synchronizationdecor.Percentage(decor.WCSyncSpace),            ),mpb.AppendDecorators(// replace ETA decorator with "done" message, OnComplete eventdecor.OnComplete(// ETA decorator with ewma age of 30decor.EwmaETA(decor.ET_STYLE_GO,30,decor.WCSyncWidth),"done",                ),            ),        )// simulating some workgofunc() {deferwg.Done()rng:=rand.New(rand.NewSource(time.Now().UnixNano()))max:=100*time.Millisecondfori:=0;i<total;i++ {// start variable is solely for EWMA calculation// EWMA's unit of measure is an iteration's durationstart:=time.Now()time.Sleep(time.Duration(rng.Intn(10)+1)*max/10)// we need to call EwmaIncrement to fulfill ewma decorator's contractbar.EwmaIncrement(time.Since(start))            }        }()    }// wait for passed wg and for all bars to complete and flushp.Wait()

dynamic total

complex

byte counters


[8]ページ先頭

©2009-2025 Movatter.jp