Hi John I have taken code from one of the site to make it work for me
In real program, spawning 100 goroutine to do the work with timeout 2 sec but found that entire program takes time which is equal to time taken by routine which finishes last irrespective of workgroup timeout So need help to fix program so that timeout will force to close and merge the work done by all routines within 2 sec where few routines will return work where as few will not because of timeout Thanks Abhi > On Jan 8, 2017, at 5:42 PM, John Souvestre <[email protected]> wrote: > > Hi again. > > Did you perhaps intend to make the call to monitorWorker() as a goroutine? > That would let it run in parallel with the rest of main. > > John > > John Souvestre - New Orleans LA > > From: John Souvestre [mailto:[email protected]] > Sent: 2017 January 08, Sun 06:10 > To: 'golang-nuts' > Subject: RE: [go-nuts] Multiple goroutine timeout for waitgroup not working > > Hi Abhi. > > I believe that the wait group timeout (in monitorWorker) was set to 2 seconds > in the code you posted. > > I put a debugging print in the timeout case, and it is taking place. > > What were you expecting to see? > > John > > John Souvestre - New Orleans LA > > From: [email protected] [mailto:[email protected]] On > Behalf Of [email protected] > Sent: 2017 January 08, Sun 05:48 > To: golang-nuts > Subject: Re: [go-nuts] Multiple goroutine timeout for waitgroup not working > > hi John > > Thanks for the reply > > sorry > > I mean Work2 takes => 3 seconds > work1 takes => 1 seconds > > Wait group timeout is => 1 seconds > > It is expected that only Work1 should get done and Work 2 should get timeout > which is not happening > > Waitgroup waits for both work.. program doing something wrong > > func Work2(message chan *TestStruct, wg *sync.WaitGroup, tokenNumber string) > { > > defer wg.Done() > > v1 := new(TestStruct) > v1.Name = tokenNumber > time.Sleep(3 * time.Second) > > message <- v1 > > fmt.Printf("finished %s\n", tokenNumber) > } > > Thanks, > > Abhi > > On Sunday, January 8, 2017 at 5:09:56 PM UTC+5:30, John Souvestre wrote: > What do you see when you run it? I see: > > finished 1 > finished 2 > len > %!s(int=2) ç Using a string format for an int > Name > 1 > Name > 2 > > Ø Work 2 - have 3 second > > > I’m not sure exactly what you are trying to do, but I suspect that changing > “messges” to hold 2 items might make it work. > > messges := make(chan *TestStruct, 2) > > I’m guessing, but I suspect that you didn’t realize that if Work1 runs first, > then Work2 will block since the channel is full (or until you close it). > > John > > John Souvestre - New Orleans LA > -- > You received this message because you are subscribed to a topic in the Google > Groups "golang-nuts" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/golang-nuts/o0DYWZIlmvs/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
