[Stackless] Santa concurrency problem
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.
> def ManageSleepingTasklets(self):
> while True:
> if len(self.sleepingTasklets):
> endTime = self.sleepingTasklets
> if endTime <= time.time():
> channel = self.sleepingTasklets
> del self.sleepingTasklets
> # We have to send something, but it doesn't matter what as
> it is not used.
> 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
> Stackless mailing list
> Stackless at stackless.com
Stackless mailing list
Stackless at stackless.com
More information about the Stackless