[Stackless] Santa concurrency problem

Carlos Eduardo de Paula carlosedp at gmail.com
Wed Mar 28 20:07:22 CEST 2007


Brian,

the last proposed example by richard, where the Sleep manager sleeps
while there are no tasklets sleeping is better then the fixed
time.sleep(0.001) one... try it out:

def ManageSleepingTasklets():
    while True:
     if len(sleepingTasklets):
       endTime = sleepingTasklets[0][0]
       if endTime <= time.time():
         channel = sleepingTasklets[0][1]
         del sleepingTasklets[0]
         # We have to send something, but it doesn't matter what as it
is not used.
         channel.send(None)
       elif stackless.getruncount() == 1:
         # We are the only tasklet running, the rest are blocked on
channels sleeping.
         # We can call time.sleep until the first awakens to avoid a busy wait.
         delay = endTime - time.time()
         #print "wait delay", delay
         time.sleep(max(delay,0))
     stackless.schedule()

Carlos


On 3/28/07, Brian Zimmer <bzimmer at ziclix.com> wrote:
> I removed all the wxPython code but it still exhibits the same
> behaviour as the original sleep in that it pins a cpu in a busy wait.
> The best overall solution appears to be (in my limited understanding of
> Stackless) the tiny sleep 0.001 seconds because it doesn't appear to
> significantly change the behaviour of the application and keeps the
> stackless process out of the top spot in top.  Of course this is highly
> dependent on the application, as I'm learning.
>
> thanks, brian
>
> On Mar 28, 2007, at 09:16 AM, Christian Tismer wrote:
>
> >
> > On 28.03.2007, at 17:54, Greg Hazel wrote:
> >
> >>> The code uses a bit of wxPython, but that can be removed.
> >>
> >> Just a warning - Stackless and wxPython likely have problems together.
> >> With greenlets, wxYield can cause serious errors, since it does stack
> >> swapping of it's own. On Windows, at least.
> >
> > Sure, there is a load of things to avoid with wx.
> > Mouse events for instance are (were 2 years ago) living
> > as a local variable on the stack, so if you want a tasklet
> > driven mouse driver (which is very nice), you need to
> > save all mouse status in an extra object and pass that to
> > the driver.
> > wxYield I know nothing about, but using concurrent
> > stack switching approaches is of course a bad idea.
> >
> > As said this example is not about wx, but some idea
> > how to patch time-aware behavior into stackless.
> >
> > ciao -- chris
> >
> > _______________________________________________
> > Stackless mailing list
> > Stackless at stackless.com
> > http://www.stackless.com/mailman/listinfo/stackless
> >
>
>
> _______________________________________________
> Stackless mailing list
> Stackless at stackless.com
> http://www.stackless.com/mailman/listinfo/stackless
>


-- 
-------------------------------------------------------------------
Visit Stackless Examples Project
http://code.google.com/p/stacklessexamples/
Stackless Python - www.stackless.com
-------------------------------------------------------------------

_______________________________________________
Stackless mailing list
Stackless at stackless.com
http://www.stackless.com/mailman/listinfo/stackless



More information about the Stackless mailing list