On May 7, 2008, at 4:44 AM, Manlio Perillo wrote:

Moreover I don't see any readons to have a revc method instead of read.

I just wanted to emphasize that its behavior is socket-like, not file- like. It could be called read as long as its behavior is made clear to application developers.

Unfortunately there is a *big* usability problem: the extension is based on a well specified feature of WSGI: the gateway can suspend the execution of the WSGI application when it yields.

However if the asynchronous code is present in a "child" function, we have something like this:
...
That is, all the functions in the "chain" have to yield, and is not very good.
Yes, you're right. However, if you're willing/able to use Python 2.5, you can use the new features of generators to implement a call stack that lets you call child functions and receive return values and exceptions from them. I've implemented this in awsgiref.callstack. Have a look at
 http://pseudogreen.org/bzr/awsgiref/examples/echo_request_with_callstack.py
for an example of how it works.

I don't think this will solve the problem.
Moreover in your example you buffer the whole request body so that you have to yield only one time.

Your example was:

def application(environ, start_response):
  def nested():
     while True:
        poll(xxx)
        yield ''
     yield result

  for r in nested():
     if not r:
         yield ''

  yield r

My suggestion would allow you to rewrite this like so:

@awsgiref.callstack.add_callstack
def application(environ, start_response):
  def nested():
     while True:
        poll(xxx)
        yield ''
     yield result

  yield nested()

The nesting can be arbitrarily deep, so nested() could yield doubly_nested() and so on. While not as elegant as greenlets, I think this does address your concern.

The main problem I see with greenlet is that is is not yet stable (there are some problems with the garbage collector) and that is is not part of CPython.

This means that it can be not acceptable to write a PEP for a WSGI like interface with coroutine support.

This is the problem I see with greenlets, too. If they were part of the stdlib, it'd be a different story, but as things stand, I don't think they should be part of the spec.


Chris
_______________________________________________
Web-SIG mailing list
Web-SIG@python.org
Web SIG: http://www.python.org/sigs/web-sig
Unsubscribe: 
http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com

Reply via email to