[Twisted-Python] Limiting a task.Cooperator to N work units / sec

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Fri Oct 1 09:27:02 EDT 2010


On 12:58 pm, p.mayers at imperial.ac.uk wrote:
>On 01/10/10 13:46, exarkun at twistedmatrix.com wrote:
>>On 09:41 am, p.mayers at imperial.ac.uk wrote:
>>>Is there an easy way to make a task.Cooperator instance only execute 
>>>N
>>>ticks / sec, summed across all iterators it's driving? So if you add
>>>two
>>>iterators, they each run at N/2 per sec, 3 at N/3, etc.
>>>
>>>It seems like this ought to do it:
>>
>>Very close!  It took me a while to notice the mistake.
>>>N =<rate>
>>>
>>>def myScheduler(x):
>>>    # reschedule N times per second
>>>    reactor.callLater(1.0/N, x)
>>
>>The scheduler function must not return None!  This confuses the
>>scheduling code in cooperator and causes it to run too many things in
>>parallel.  This mistake could be detected easily by cooperator and a
>
>Ah ha! In fact, it looks like the scheduler must return an object with 
>a
>.cancel() method (obviously an IDelayedCall in the usual case).
>
>I'll open a ticket; presumably it would a) be nice to detect invalid
>return values and b) update the docstring of Cooperator.__init__?

Sounds great.

Jean-Paul



More information about the Twisted-Python mailing list