[Stackless] Proposed modification WRT threading and scheduling
Jeff Senn
senn at maya.com
Wed Jan 9 21:14:07 CET 2008
I think I'm with Richard on this one. In fact I might say "fix the
bug(mis-feature?)"
rather than "disable this behavior". :-)
Since you have no idea that any other threads have anything to do with
stackless (as in Richard's example) -- there is no reason for
stackless.run() to
act differently when there is 1 thread versus >1 threads.
If .run() is going to return when there are no tasklets to run, then
it should
ALWAYS do that. And I do believe that returning is the "correct"
decision because it leaves
the higher-level scheduling up to the implementor. (You could, for
instance as Arnar implies,
wrap .run() in a loop with time.sleep())
On an only-vaguely-related subject: it seems to me there is still some
bug (resulting in crash)
that we never really found trying to *generally* support tasklets
blocking/waking each other
across thread boundaries. I, for instance, am going to some trouble
to only do this
in particular "small" (well-characterized) ways. Is anyone doing this
in a large
enough scale to believe it is well tested?
-Jas
On Jan 9, 2008, at 2:31 PM, Richard Tew wrote:
> On Jan 9, 2008 11:02 PM, Arnar Birgisson <arnarbi at gmail.com> wrote:
>> On Jan 9, 2008 8:25 AM, Richard Tew <richard.m.tew at gmail.com> wrote:
>>> I'd like to make a change to Stackless to optionally disable this
>>> behaviour, perhaps an option which can be set on the stackless
>>> module,
>>> or a parameter to the 'stackless.run' function.
>>
>> What do you mean by "disable this behaviour"? Would you make the
>> scheduler with no runnable tasklets busy-loop to poll for tasklets?
>> If
>> so, the parameter you mention could be an integer, saying how many
>> milliseconds to sleep between polls, with the default value of 0
>> giving you the current blocking behaviour.
>
> As I understand it, this would make no difference. The tasklets would
> have to be awakened by channel activity on the other threads. This
> will already cause the main thread to awaken.
>
>> Or perhaps you have something different in mind?
>
> Yes. I would just have the scheduler exit when there are no runnable
> tasklets left within it, regardless of the existence of other Python
> threads. Any parameter or setting would be boolean. By default False
> indicating that it should block for the other threads and True that it
> should retrieve the main tasklet and exit the scheduler.
>
> Richard.
>
> _______________________________________________
> Stackless mailing list
> Stackless at stackless.com
> http://www.stackless.com/mailman/listinfo/stackless
>
More information about the Stackless
mailing list