[Stackless] Santa concurrency problem

Santiago Gala sgala at apache.org
Mon Mar 26 23:15:09 CEST 2007


El lun, 26-03-2007 a las 20:20 +0000, Richard Tew escribió:
> On 3/26/07, Carlos Eduardo de Paula <carlosedp at gmail.com> wrote:
> > What is taking a hit on CPU is the ManageSleepingTasklets tasklet, it
> > gets that usage in its loop.
> >
> > What I can do for throttling the cpu usage is put a time.sleep(0.001)
> > inside the while loop, with it we can have a decent precision on time
> > (1 milisecond) and having the CPU at low usage...
> >
> > Maybe Richard can help us out about a cleaner solution on this...
> 
> The Sleep code here is copied from the simple example I wrote.
> Unfortunately like most low level Stackless examples it only
> really serves to demonstrate what you can do, now how you should
> do it in all cases.  In the case here, since it is responsible for
> awakening tasklets and if it knows none are waking anytime
> soon, it is safe to avoid a busy wait by adapting the code to
> use time.sleep for the interim.
> 

Cool, this code makes it work with unnoticeable load, while remaining
performant (depending on the sleep time of the workers).

The only minor nit: I found delay can be negative, so I got an
exception. Using max(delay,0) solved it.

Regards
Santiago

>   def ManageSleepingTasklets(self):
>     while True:
>       if len(self.sleepingTasklets):
>         endTime = self.sleepingTasklets[0][0]
>         if endTime <= time.time():
>           channel = self.sleepingTasklets[0][1]
>           del self.sleepingTasklets[0]
>           # We have to send something, but it doesn't matter what as
> it is not used.
>           channel.send(None)
>         elif stackless.runcount == 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(delay)
>       stackless.schedule()
> 
> Cheers,
> Richard.
> 
> _______________________________________________
> 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


More information about the Stackless mailing list