From 5203f7fe9352d840012aa08037914d63b60931ee Mon Sep 17 00:00:00 2001 From: Sarthak Date: Wed, 27 Mar 2024 12:23:13 +0530 Subject: [PATCH] Sarthak | Runs each worker repeat number of times --- workers/worker_group.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/workers/worker_group.go b/workers/worker_group.go index 0a66b14..70491ea 100644 --- a/workers/worker_group.go +++ b/workers/worker_group.go @@ -111,17 +111,20 @@ func (group *WorkerGroup) runWorkers( return workers } - //runs all the workers. - runWorkers := func(workers []Worker) *sync.WaitGroup { - var wg sync.WaitGroup - wg.Add(int(group.options.concurrency)) - - for _, worker := range workers { - worker.run(&wg) + //runs all the workers, each worker will be run "repeat" number of times. + //runWorkersAndWait will wait till all the workers are done in each run. + runWorkersAndWait := func(workers []Worker) { + for run := uint(1); run <= group.options.repeat; run++ { + var wg sync.WaitGroup + wg.Add(len(workers)) + + for _, worker := range workers { + worker.run(&wg) + } + wg.Wait() } - return &wg } - runWorkers(instantiateWorkers()).Wait() + runWorkersAndWait(instantiateWorkers()) group.doneChannel <- struct{}{} }