[Twisted-Python] Very interesting....

Manlio Perillo manlio_perillo at libero.it
Mon Apr 26 10:28:22 MDT 2010


exarkun at twistedmatrix.com ha scritto:
> On 03:37 pm, manlio_perillo at libero.it wrote:
>> exarkun at twistedmatrix.com ha scritto:
>>> On 01:13 am, jasonjwwilliams at gmail.com wrote:
>>>> I didn't notice the benchmarks...good catch. I was more interested in
>>>> the conciseness or lack thereof with the various frameworks. Very
>>>> surprised that Twisted was nearly as clean and easy to read as the
>>>> Eventlet example.
>>> This comparison (in the blog post) makes the same mistake that many 
>>> such
>>> comparisons make.  The division of libraries into the arbitrary
>>> categories of "reactor model" and "coroutine" is artificial.
>>>
>>> [...]
>>> And take a look at how eventlet and gevent are implemented, and you'll
>>> find something that's essentially the same as a Twisted reactor.
>> The only significative difference, IMHO, is that eventlet and gevent 
>> are
>> able to schedule coroutines directly in the main event loop (since they
>> have full control over it),
> 
> What does "schedule coroutines directly in the main event loop" mean?

>From the gevent intro.rst:

Unlike other network libraries and similar to eventlet, gevent starts
the event loop implicitly in a dedicated greenlet. There's no
``reactor`` that you must ``run()`` or ``dispatch()`` function to call.
When a function from gevent API wants to block, it obtains the
:class:`Hub` - a greenlet that runs the event loop - and switches to it.
If there's no :class:`Hub` instance yet, one is created on the fly.

Not sure if you can say that "coroutines are scheduled directly in the
main loop".


>> while with Twisted and Python applications
>> embedded in C servers like Nginx, you have to return control to the
>> "framework" (this what the x-wsgiorg.suspend WSGI extension does).
> 
> It looks like I misremembered the interface provided by txwsgi.  I 
> thought it let you switch to another coroutine directly, 

No, since this would not be possible with a WSGI implementation embedded
in Nginx.

You *need* to return control to the event loop (process cycle in Nginx).

> rather than 
> requiring that you yield an empty string after (the equivalent of) 
> setting a flag.  This seems to be more because of WSGI constraints than 
> anything else, though.
> 

Regards  Manlio




More information about the Twisted-Python mailing list