[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