
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?