[Web-SIG] WSGI and asyncronous applications support

Jean-Paul Calderone exarkun at divmod.com
Tue Sep 18 14:40:57 CEST 2007


On Tue, 18 Sep 2007 13:39:23 +0200, Manlio Perillo <manlio_perillo at libero.it> wrote:
> [snip]
>
>1) should be very simple to implement, and it is easy to understand how
>to use it.
>
>As an example, we can use some API that calls a callback function when
>the result is available:
>conn.execute("SELECT * FROM test", query_callback)
>
>def query_callback(row):
>    write(row[...])
>
>
>2) Can be implemented in mod_wsgi, however my problem is that I can't
>figure out how the application can yield some data available after a
>callback is called.
>

I think you figured it out already, actually:

    def app(...):
        conn.execute("SELECT * FROM test", query_callback)
        # indicate not-done-yet, however

    def query_callback(...):
        write(...)
        conn.execute("SELECT * FROM test2", another_callback)

    def another_callback(...):
        write(...)
        finish()

If you can have one callback, then there's no reason you shouldn't be
able to have an arbitrary number of callbacks.

Of course, this could also be expressed in a less error prone manner:

    def app(...):
        test_deferred = conn.execute("SELECT * FROM test")
        test_deferred.addCallback(query_callback)
        return test_deferred

    def query_callback(...):
        write(...)
        test2_deferred = conn.execute("SELECT * FROM test2")
        test2_deferred.addCallback(another_callback)
        return test2_deferred

    def another_callback(...):
        write(...)

  ;)

Jean-Paul


More information about the Web-SIG mailing list