python的promise/future模式

pip install futures

Executor

from concurrent import futures

Executor用来接收异步任务(包含参数),并返回一个Future


Executor

    submit(fn, *args, **kwargs)

    map(func, *iterables, timeout=None)

    shutdown(wait=True)

Executor还有两个子类ThreadPoolExecutor,ProcessPoolExecutor


Future Objects

    cancel()

    cancelled()

    running()

    done()

    result(timeout=None)

    exception(timeout=None)

    add_done_callback(fn)



from concurrent import futures
import urllib2

URLS = ['http://www.baidu.com/',
        'http://www.google.com/',
        'http://my.oschina.net/',
        'http://blog.sina.com.cn//']

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

def main():
    with futures.ThreadPoolExecutor(max_workers=5) as executor:
        future_to_urls = dict( (executor.submit(load_url, url, 10), url) for url in URLS )

        for future in futures.as_completed(future_to_urls):
            url = future_to_urls[future]
            try:
                print '%r page is %d bytes' % (url, len(future.result()))
            except Exception as e:
                print '%r generated an exception: %s' % (url, e)

if __name__ == '__main__':
    main()


你可能感兴趣的:(python的promise/future模式)