[Stackless] Context Switching and Queues

Richard Tew richard.m.tew at gmail.com
Sun Sep 2 23:52:31 CEST 2007


On 9/2/07, Andrew Francis <andrewfr_ice at yahoo.com> wrote:
> tasklets that can run, a chance to run. The important
> point is each time, a channel.send occurs, the
> producer is re-scheduled. I felt there was needless
> context switching.

Maybe I have skimmed past parts of your post which would suggest this
is not the case, but perhaps the 'preference' attribute on the channel
class will be of help?

-1 = prefer receiver  1 = prefer sender  0 no preference

I believe if you were to set this to 1 and a receiver was waiting on
the other end, the sender would stay the current tasklet and the
receiver would be put next in line to be scheduled.

>>> import stackless
>>> c = stackless.channel()
>>> def f():
...     print 'sending'
...     c.send(1)
...     print 'sent'
...
>>> def g():
...     print 'receiving'
...     c.receive()
...     print 'received'
...
>>> stackless.tasklet(g)().run()
receiving
>>> c.preference = 1
>>> stackless.tasklet(f)()
<stackless.tasklet object at 0x01618630>
>>> stackless.run()
sending
sent
received
>>>

Cheers,
Richard.




More information about the Stackless mailing list