-
concurrent.futures
Python3.2带来的新版功能。是Python并发执行的标准库。
这个模块具有线程池和进程池、管理并行编程任务、处理非确定性的执行流程、进程/线程同步等功能。
concurrent.futures
是两个文件放在一起作为这个模块,因为concurrent文件夹下只有futures这个文件夹,而futures下有两个主要文件thread.py
和process.py
:深度理解,参见《Python并行编程 中文版》、《concurrent.futures官方文档》
此模块由以下部分组成:
concurrent.futures.Executor
: 这是一个虚拟基类,提供了异步执行的方法。submit(function, argument)
: 调度函数(可调用的对象)的执行,将argument
作为参数传入。map(function, argument)
: 将argument
作为参数执行函数,以 异步 的方式。shutdown(Wait=True)
: 发出让执行者释放所有资源的信号。concurrent.futures.Future
: 其中包括函数的异步执行。Future对象是submit任务(即带有参数的functions)到executor的实例。
Executor是抽象类,可以通过子类访问,即线程或进程的
ExecutorPools
。因为,线程或进程的实例是依赖于资源的任务,所以最好以“池”的形式将他们组织在一起,作为可以重用的launcher或executor。 -
ThreadPoolExecutor
ThreadPoolExecutor
是Executor
的子类,它使用***线程池***来异步执行调用。concurrent.futures.ThreadPoolExecutor(max_workers=None, thread_name_prefix='', initializer=None, initargs=())
Executor 的一个子类,使用最多
max_workers
个线程的线程池来异步执行调用。如果max_workers
为None
或没有指定,将默认为机器处理器的个数。import concurrent.futures 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/'] # Retrieve a single page and report the URL and contents def load_url(url, timeout): with urllib.request.urlopen(url, timeout=timeout) as conn: return conn.read() # We can use a with statement to ensure threads are cleaned up promptly with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: # Start the load operations and mark each future with its URL future_to_url = {executor.submit(load_url, url, 60): url for url in URLS} for future in concurrent.futures.as_completed(future_to_url): url = future_to_url[future] try: data = future.result() except Exception as exc: print('%r generated an exception: %s' % (url, exc)) else: print('%r page is %d bytes' % (url, len(data)))
concurrent.futures.ThreadPoolExecutor并发库详解
最新推荐文章于 2024-07-01 21:51:34 发布