futures - a new package for asynchronous execution

B

Brian Quinlan

Hey all,

I recently implemented a package that I'd like to have include in the
Python 3.x standard library (and maybe Python 2.x) and I'd love to
have the feedback of this list.

The basic idea is to implement an asynchronous execution method
patterned heavily on java.util.concurrent (but less lame because
Python has functions as first-class objects). Here is a fairly
advanced example:

import futures
import functools
import urllib.request

URLS = [
'http://www.foxnews.com/',
'http://www.cnn.com/',
'http://europe.wsj.com/',
'http://www.bbc.co.uk/',
'http://some-made-up-domain.com/']

def load_url(url, timeout):
return urllib.request.urlopen(url, timeout=timeout).read()

# Use a thread pool with 5 threads to download the URLs. Using a pool
# of processes would involve changing the initialization to:
# with futures.ProcessPoolExecutor(max_processes=5) as executor
with futures.ThreadPoolExecutor(max_threads=5) as executor:
future_list = executor.run_to_futures(
[functools.partial(load_url, url, 30) for url in URLS])

# Check the results of each future.
for url, future in zip(URLS, future_list):
if future.exception() is not None:
print('%r generated an exception: %s' % (url,
future.exception()))
else:
print('%r page is %d bytes' % (url, len(future.result())))

In this example, executor.run_to_futures() returns only when every url
has been retrieved but it is possible to return immediately, on the
first completion or on the first failure depending on the desired work
pattern.

The complete docs are here:
http://sweetapp.com/futures/

A draft PEP is here:
http://code.google.com/p/pythonfutures/source/browse/trunk/PEP.txt

And the code is here:
http://pypi.python.org/pypi/futures3/

All feedback appreciated!

Cheers,
Brian
 
A

Aahz

I recently implemented a package that I'd like to have include in the
Python 3.x standard library (and maybe Python 2.x) and I'd love to
have the feedback of this list.

Any recently implemented library has an extremely high bar before it gets
adopted into the standard library. You should concentrate on persuading
people to use your library; for example, you should make regular feature
and bugfix releases and announce them on c.l.py.announce.
--
Aahz ([email protected]) <*> http://www.pythoncraft.com/

[on old computer technologies and programmers] "Fancy tail fins on a
brand new '59 Cadillac didn't mean throwing out a whole generation of
mechanics who started with model As." --Andrew Dalke
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top