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.

Reply via email to