如何解决Uiprogress条在小型终端上添加更多的进度条
我正在一个场景中,我启动多个goroutine,每个goroutine旨在执行某些任务,并且我想使用进度条显示每个goroutine的进度。
我尝试使用uiprogress,mpb,但是当创建的条数很高时,所有这些进度条都会失败,例如100 https://github.com/gosuri/uiprogress/blob/master/example/full/full.go
当提供的条数很高时,输出开始重叠,导致每个goroutine显示多个进度条。
有人可以帮我一些方法,即使goroutine的数量很多,每个goroutine仅显示一次进度条
或者除了进度条以外,还有什么其他方法可以用来显示goroutines中的动态数据
func main() {
fmt.Println("apps: deployment started: app1,app2")
uiprogress.Start()
var wg sync.WaitGroup
wg.Add(100)
for i := 1; i <= 100; i++ {
bar := uiprogress.AddBar(100).AppendCompleted().PrependElapsed()
go func(appName string,progressBar *uiprogress.Bar) {
defer wg.Done()
deploy(appName,progressBar)
}(fmt.Sprintf("app%d",i),bar)
}
wg.Wait()
uiprogress.Stop()
fmt.Println("apps: successfully deployed: app1,app2")
}
func deploy(app string,bar *uiprogress.Bar) {
var lastStatus string
status := make(chan string)
bar.Width = 50
// prepend the deploy step to the bar
bar.PrependFunc(func(b *uiprogress.Bar) string {
statusValue := <-status
if len(statusValue) == 0 {
return fmt.Sprintf("%s,Deployment Status = %s completed",app,lastStatus)
}
lastStatus = statusValue
return fmt.Sprintf("%s,Last Status = %#v Deployment Status = %s",lastStatus,statusValue)
})
defer func() {
bar.Set(bar.Total)
close(status)
}()
bar.Incr()
status <- "pending"
for retry := 1; retry <= 100; retry++ {
bar.Incr()
time.Sleep(time.Second * 1)
if retry%10 == 0 {
return
}
status <- fmt.Sprintf("ongoing %d",retry)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。