progressAsWriter example WithWaitGroup(&qwg)
Vladimir Bauer
1 year, 10 months ago
| 12 | 12 | |
| 13 | 13 | func main() { |
| 14 | 14 | total, numBars := 100, 2 |
| 15 | var bwg sync.WaitGroup | |
| 15 | var bwg, qwg sync.WaitGroup | |
| 16 | 16 | bwg.Add(numBars) |
| 17 | qwg.Add(1) | |
| 17 | 18 | done := make(chan interface{}) |
| 18 | p := mpb.New(mpb.WithWidth(64), mpb.WithShutdownNotifier(done)) | |
| 19 | p := mpb.New(mpb.WithWidth(64), mpb.WithShutdownNotifier(done), mpb.WithWaitGroup(&qwg)) | |
| 19 | 20 | |
| 20 | 21 | log.SetOutput(p) |
| 22 | ||
| 23 | go func() { | |
| 24 | defer qwg.Done() | |
| 25 | for { | |
| 26 | select { | |
| 27 | case <-done: | |
| 28 | // after done, underlying io.Writer returns mpb.DoneError | |
| 29 | // so following isn't printed | |
| 30 | log.Println("all done") | |
| 31 | return | |
| 32 | default: | |
| 33 | log.Println("waiting for done") | |
| 34 | time.Sleep(150 * time.Millisecond) | |
| 35 | } | |
| 36 | } | |
| 37 | }() | |
| 38 | ||
| 21 | 39 | nopBar := p.MustAdd(0, nil) |
| 22 | 40 | |
| 23 | 41 | for i := 0; i < numBars; i++ { |
| 50 | 68 | }() |
| 51 | 69 | } |
| 52 | 70 | |
| 53 | var qwg sync.WaitGroup | |
| 54 | qwg.Add(1) | |
| 55 | go func() { | |
| 56 | defer qwg.Done() | |
| 57 | for { | |
| 58 | select { | |
| 59 | case <-done: | |
| 60 | // after done, underlying io.Writer returns mpb.DoneError | |
| 61 | // so following isn't printed | |
| 62 | log.Println("all done") | |
| 63 | return | |
| 64 | default: | |
| 65 | log.Println("waiting for done") | |
| 66 | time.Sleep(150 * time.Millisecond) | |
| 67 | } | |
| 68 | } | |
| 69 | }() | |
| 70 | ||
| 71 | 71 | bwg.Wait() |
| 72 | 72 | log.Println("completing nop bar") |
| 73 | 73 | nopBar.EnableTriggerComplete() |
| 74 | 74 | |
| 75 | 75 | p.Wait() |
| 76 | qwg.Wait() | |
| 77 | 76 | } |