progressAsWriter example with nop bar
Vladimir Bauer
1 year, 10 months ago
| 12 | 12 | |
| 13 | 13 | func main() { |
| 14 | 14 | total, numBars := 100, 2 |
| 15 | var wg sync.WaitGroup | |
| 16 | wg.Add(numBars) | |
| 15 | var bwg sync.WaitGroup | |
| 16 | bwg.Add(numBars) | |
| 17 | 17 | done := make(chan interface{}) |
| 18 | p := mpb.New( | |
| 19 | mpb.WithWidth(64), | |
| 20 | mpb.WithWaitGroup(&wg), | |
| 21 | mpb.WithShutdownNotifier(done), | |
| 22 | ) | |
| 18 | p := mpb.New(mpb.WithWidth(64), mpb.WithShutdownNotifier(done)) | |
| 23 | 19 | |
| 24 | 20 | log.SetOutput(p) |
| 21 | nopBar := p.MustAdd(0, nil) | |
| 25 | 22 | |
| 26 | 23 | for i := 0; i < numBars; i++ { |
| 27 | 24 | name := fmt.Sprintf("Bar#%d:", i) |
| 38 | 35 | ) |
| 39 | 36 | // simulating some work |
| 40 | 37 | go func() { |
| 41 | defer wg.Done() | |
| 38 | defer bwg.Done() | |
| 42 | 39 | rng := rand.New(rand.NewSource(time.Now().UnixNano())) |
| 43 | 40 | max := 100 * time.Millisecond |
| 44 | 41 | for i := 0; i < total; i++ { |
| 66 | 63 | break quit |
| 67 | 64 | default: |
| 68 | 65 | log.Println("waiting for done") |
| 69 | time.Sleep(100 * time.Millisecond) | |
| 66 | time.Sleep(150 * time.Millisecond) | |
| 70 | 67 | } |
| 71 | 68 | } |
| 72 | 69 | qwg.Done() |
| 73 | 70 | }() |
| 74 | 71 | |
| 72 | bwg.Wait() | |
| 73 | log.Println("completing nop bar") | |
| 74 | nopBar.EnableTriggerComplete() | |
| 75 | ||
| 75 | 76 | p.Wait() |
| 76 | 77 | qwg.Wait() |
| 77 | 78 | } |