[Web-SIG] PEP 444 feature request - Futures executor

Alice Bevan–McGregor alice at gothcandy.com
Fri Jan 7 21:21:35 CET 2011


On Fri, Jan 7, 2011 at 9:47 AM, Timothy Farrell wrote:
> There has been much discussion about how to handle async in PEP 444 and 
> that discussion centers around the use of futures.  However, I'm 
> requesting that servers _optionally_ provide environ['wsgi.executor'] 
> as a futures executor that applications can use for the purpose of 
> doing something after the response is fully sent to the client.  This 
> is feature request is designed to be concurrency methodology agnostic.

+1

On 2011-01-07 11:07:36 -0800, Timothy Farrell said:
> On 2011-01-07 09:59:10 -0800, Guido van Rossum said:
>> If it's optional, what's the benefit for the app of getting it through 
>> WSGI instead of through importing some other standard module?
> 
> Aside from that, servers currently specify if they are multi-threaded 
> and/or multi-process.  Having the server provide the executor allows it 
> to provide an executor that most matches its own concurrency model...

I think that's the bigger point; WSGI servers do implement their own 
concurrency model for request processing and utilizing a 
server-provided executor which interfaces with whatever the internal 
representation of concurrency is would be highly beneficial.  (Vs. an 
application utilizing a more generic executor implementation that adds 
a second thread pool...)

Taking futures to be separate and distinct from the rest of async 
discussion, I still think it's an extremely useful feature.  I outlined 
my own personal use cases in my slew of e-mails last night, and many of 
them are also not time sensitive.  (E.g. image scaling, full text 
indexing, etc.)

> Maybe this should be a server option instead of a spec option.

It would definitely fall under the Server API spec, not the application 
one.  Being optional, and with simple (wsgi.executor) access via the 
environ would also allow middleware developers to create executor 
implementations (or just reference the concurrent.futures 
implementation).

>> I worry that this weighs down the WSGI standard with the responsibility 
>> of coming up with the perfect executor API, and if it's not quite 
>> perfect after all, servers are additionally required to support the 
>> standard but suboptimal API effectively forever.
> 
> I'm not following you here.  What's wrong with executor.submit() that 
> might need changing?  Granted, it would not be ideal if an application 
> called executor.shutdown().  This doesn't seem difficult to my tiny 
> brain.

The "perfect" executor API is already well defined in PEP 3148 AFIK.  
Specific methods with specific semantics implemented in a duck-typed 
way.  The underlying implementation is up to the server, or the server 
can utilize an external (or built-in in 3.2) futures implementation.

If WSGI 2 were to incorporate futures as a feature there would have to 
be some mandate as to which methods applications and middleware are 
allowed to call; similar to how we do not allow .close() across 
wsgi.input or wsgi.errors.

	- Alice.




More information about the Web-SIG mailing list