Twisted: 1 thread in the reactor pattern

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Thu Sep 24 12:54:35 EDT 2009


On 07:10 am, jacopo.pecci at gmail.com wrote:
>On Sep 23, 5:57 pm, exar... at twistedmatrix.com wrote:
>[snip]
>>
>>It isn't possible.  While the remote methods are running, other events
>>are not being serviced.  This is what is meant when people describe
>>Twisted as a "*cooperative* multitasking" system.  Event handlers 
>>(such
>>as remote methods) run for a short enough period of time that it 
>>doesn't
>>matter that the reactor is prevented from accepting new connections 
>>(or
>>what have you) for the duration of their execution.
>>
>>Jean-Paul
>
>Jean -Paul, not sure I have understood.
>Say I have one server S and two clients C1 and C2 (all on separate
>machines).
>
>(a)     C1 requests a remote call of f1() to S, f1() requires 5 minutes 
>of
>processing.
>(b)     S  puts f1() in a queue and returns immediately a Deferred to
>C1.
>(c)     Now f1() starts and keeps S 19s processor busy for 5 mins
>(d)      after few seconds C2 requests a remote call f2() to S.
>(e)     On S the processor is already engaged with f1() but still
> 1Csomeone 1D on S is able to accept the request from C2, put it in a
>queue (after f1()) and return a Deferred to C2.
>(f)     At some point after f1() is finished f2() will start
>
>I believe (b) is what you say  1Crun for a short enough period of time
>that it doesn't
>matter that the reactor is prevented from accepting new connections
>(or
>what have you) for the duration of their execution. 1D ?!

If you have a function that takes 5 minutes to run, then you're blocking 
the reactor thread for 5 minutes and no other events are serviced until 
the function finishes running.

You have to avoid blocking the reactor thread if you want other events 
to continue to be serviced.  There are various strategies for avoiding 
blocking.  Different strategies are appropriate for different kinds of 
blocking code.

Jean-Paul



More information about the Python-list mailing list