[Web-SIG] [ANN] twsgi: asynchronous WSGI implementation for Twisted Web
Manlio Perillo
manlio_perillo at libero.it
Fri Apr 9 13:00:12 CEST 2010
I have started to write an asynchronous WSGI implementation for Twisted Web.
The standard implementation execute the WSGI application in a separate
thread.
twsgi will instead execute the application in the main Twisted thread.
The advantage is that twsgi is better integrated in Twisted, and WSGI
applications will be able to use all features available in Twisted.
Code is availale from a Mercurial repository:
http://hg.mperillo.ath.cx/twisted/twsgi
The purpose of twsgi is to have a pure Python implementation of WSGI
with support for asynchronous HTTP servers and asynchronous WSGI
applications.
The implementation is similar to ngx_http_wsgi_module, and can be used
to quick test asynchronous extensions.
write callable is not implemented (calling it will raise NotImplemented
error), since write callable can not be implemented in an asynchronous
web server without using threads (and twsgi *does* not use threads).
ngx_http_wsgi_module does the same.
TODO
----
* support for suspending iteration over WSGI app iter, when socket is
not ready to send data.
execution will be resumed when socked is ready again.
* support for suspend/resume extension, as described here:
http://comments.gmane.org/gmane.comp.python.twisted.web/632
It will have some differences:
- the name will be 'wsgiorg.suspend' instead of 'wsgi.pause_output'
The wsgiorg namespace is used, since the plan is to have it
standardized [1], but it can only be implemented on asynchronous
servers.
- wsgi.pause_output function will accept an optional timeout, in
milliseconds.
If timeout is specified, application will be implicitly resumed
when timeout expires.
- resume function will return a boolean value.
True: if execution was suspended and it is going to be resumed
False: if execution was not suspended
The return value can be used to check if timeout specified in
wsgiorg.suspend expired.
I'm not sure if a boolean value is the best solution.
Maybe it should return -1 is execution was not suspended, and 0
otherwise.
[1] unlike other proposed async extensions, suspend/resume is much more
simple and easy to implement, so it is more likely to have a wide
consensus over the specification.
Feedbacks are welcomed.
Regards Manlio
More information about the Web-SIG
mailing list