[Stackless] Channels between threads
Andrew Francis
andrewfr_ice at yahoo.com
Sun Jan 20 18:06:08 CET 2008
Hi Simon:
> I understand that channel.send will block until a
> receive is made.
> However, this receive is being made in the
> requesting thread and the
> results are successfully received!
>
> So why does this code never reach the line "Ready
> for new work"?
>
> Before the ch.send, the balance on the channel is 0.
> In the receiving code, the balance on the channel
> after the receive is
> 1, even tho the data IS received.
>
> Can anyone imagine why this might be? or have I
> misunderstood?
Without seeing the rest of the code and output, I
would recommend you look at what *all* the tasklets in
the system are doing. Are all tasklets blocked except
for perhaps a tick() that prevents the Stackless
Scheduler from thinking it is deadlocked (when in
reality it is)?
Remember that when a tasklet performs a send or a
receive, it is placed at the end of the scheduled list
and other scheduled tasklets will execute. The
Stackless scheduler's behavior in conjunction with a
channel being inadvertently shared could explain why
you think the balance is wrong (think of a race
condition occuring). For kicks, do a __reduce__() on
the channel and see what tasklets are attached.
Cheers,
Andrew
____________________________________________________________________________________
Never miss a thing. Make Yahoo your home page.
http://www.yahoo.com/r/hs
More information about the Stackless
mailing list