[Twisted-web] Twisted and WSGI...

Ian Bicking ianb at colorstudy.com
Wed Apr 5 14:39:36 CDT 2006

Jim Fulton wrote:
>> As WSGI is going into python 2.5, I was wondering what the general
>> consensus is among twisted web devs about it?  Does the WSGI model map
>> well into twisted's asynchronous model? 
> Not as well as it should IMO.  There seems to be some disdain
> for asynchronous servers on the WSGI list.  I tried to
> advocate on the WSGI list for better support for asynchronous
> servers, especially wrt threading issues.

I think "disdain" is too strong.  There's a lack of any complete 
proposal which would work, especially one that doesn't have Deferred or 
other particular bits of code as a prerequesite.  There was discussion a 
long time ago, but it drifted off.  More generally, there's no larger 
consensus on how to do asynchronous programming in Python, though 
there's obvious consensus on how to do synchronous programming (that is: 
with functions).

I remember some discussion about allowing an asynchronous application to 
return '' in the WSGI app response iterator, which would signify a 
yield, but I'm not sure where any ready signal would go.

>> Say I have a WSGI
>> app and I want to port it to twisted.  How easy is that?  (I know
>> there is a twisted wsgi module)
> Trivial.

Which reminds me -- I started doing this in Paste, but got bogged down 
in all the setup and imports I didn't understand, and then subscribed 
here and never followed up.  Can someone provide an example of a simple 
function that would look like:

def serve_with_twisted(hosts, wsgi_app, **kw):
     """Serve wsgi_app indefinitely

     hosts is a list of 'address:port', and wsgi_app is a
     WSGI application.  **kw is... whatever other interesting things
     you might want to use to configure a Twisted server

Then I can lightly wrap that and people could use Twisted with their 
Paste configuration files.

>>  Do I just need to wrap some logic in deferreds?
> No. You don't have to do any twisted programming at all to use the
> web server via WSGI.
> IMO, to get the full scalability benefits you want, you may
> need to address some threading issues.  You might look at the
> Zope 3 integration, which isn't as clean as it ought to me.

Is this related to the threadpool, or are you using backdoors to the 
underlying Twisted server to do some things in an asynchronous manner?

Ian Bicking  /  ianb at colorstudy.com  /  http://blog.ianbicking.org

More information about the Twisted-web mailing list