blob: e487817dfb050ad83952b3efe66ca7e4c10b7128 [file] [log] [blame]
Antoine Pitrou64a467d2010-12-12 20:34:49 +00001:mod:`concurrent.futures` --- Launching parallel tasks
2======================================================
Brian Quinlan81c4d362010-09-18 22:35:02 +00003
4.. module:: concurrent.futures
5 :synopsis: Execute computations concurrently using threads or processes.
6
Éric Araujo19f9b712011-08-19 00:49:18 +02007.. versionadded:: 3.2
8
Raymond Hettingera1993682011-01-27 01:20:32 +00009**Source code:** :source:`Lib/concurrent/futures/thread.py`
10and :source:`Lib/concurrent/futures/process.py`
11
Raymond Hettingera1993682011-01-27 01:20:32 +000012--------------
13
Brian Quinlan81c4d362010-09-18 22:35:02 +000014The :mod:`concurrent.futures` module provides a high-level interface for
15asynchronously executing callables.
16
Ezio Melottie130a522011-10-19 10:58:56 +030017The asynchronous execution can be performed with threads, using
Georg Brandlfb1720b2010-12-09 18:08:43 +000018:class:`ThreadPoolExecutor`, or separate processes, using
Georg Brandl035cedb2010-09-19 09:31:09 +000019:class:`ProcessPoolExecutor`. Both implement the same interface, which is
Brian Quinlan81c4d362010-09-18 22:35:02 +000020defined by the abstract :class:`Executor` class.
21
Georg Brandl035cedb2010-09-19 09:31:09 +000022
Brian Quinlan81c4d362010-09-18 22:35:02 +000023Executor Objects
Georg Brandl035cedb2010-09-19 09:31:09 +000024----------------
Brian Quinlan81c4d362010-09-18 22:35:02 +000025
Benjamin Petersonc713fc72010-09-19 04:23:17 +000026.. class:: Executor
Brian Quinlan81c4d362010-09-18 22:35:02 +000027
Georg Brandl035cedb2010-09-19 09:31:09 +000028 An abstract class that provides methods to execute calls asynchronously. It
Benjamin Petersonc713fc72010-09-19 04:23:17 +000029 should not be used directly, but through its concrete subclasses.
Brian Quinlan81c4d362010-09-18 22:35:02 +000030
31 .. method:: submit(fn, *args, **kwargs)
32
Benjamin Petersonc713fc72010-09-19 04:23:17 +000033 Schedules the callable, *fn*, to be executed as ``fn(*args **kwargs)``
34 and returns a :class:`Future` object representing the execution of the
Georg Brandl035cedb2010-09-19 09:31:09 +000035 callable. ::
Brian Quinlan81c4d362010-09-18 22:35:02 +000036
Georg Brandl035cedb2010-09-19 09:31:09 +000037 with ThreadPoolExecutor(max_workers=1) as executor:
38 future = executor.submit(pow, 323, 1235)
39 print(future.result())
Brian Quinlan81c4d362010-09-18 22:35:02 +000040
41 .. method:: map(func, *iterables, timeout=None)
42
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +030043 Equivalent to :func:`map(func, *iterables) <map>` except *func* is executed
Georg Brandl035cedb2010-09-19 09:31:09 +000044 asynchronously and several calls to *func* may be made concurrently. The
Ezio Melotti7fa82222012-10-12 13:42:08 +030045 returned iterator raises a :exc:`TimeoutError` if
46 :meth:`~iterator.__next__` is called and the result isn't available
47 after *timeout* seconds from the original call to :meth:`Executor.map`.
48 *timeout* can be an int or a float. If *timeout* is not specified or
49 ``None``, there is no limit to the wait time. If a call raises an
50 exception, then that exception will be raised when its value is
51 retrieved from the iterator.
Brian Quinlan81c4d362010-09-18 22:35:02 +000052
53 .. method:: shutdown(wait=True)
54
55 Signal the executor that it should free any resources that it is using
Georg Brandl035cedb2010-09-19 09:31:09 +000056 when the currently pending futures are done executing. Calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +000057 :meth:`Executor.submit` and :meth:`Executor.map` made after shutdown will
58 raise :exc:`RuntimeError`.
59
Benjamin Petersonc713fc72010-09-19 04:23:17 +000060 If *wait* is ``True`` then this method will not return until all the
Brian Quinlan81c4d362010-09-18 22:35:02 +000061 pending futures are done executing and the resources associated with the
Georg Brandl035cedb2010-09-19 09:31:09 +000062 executor have been freed. If *wait* is ``False`` then this method will
Benjamin Petersonc713fc72010-09-19 04:23:17 +000063 return immediately and the resources associated with the executor will be
Georg Brandl035cedb2010-09-19 09:31:09 +000064 freed when all pending futures are done executing. Regardless of the
Brian Quinlan81c4d362010-09-18 22:35:02 +000065 value of *wait*, the entire Python program will not exit until all
66 pending futures are done executing.
67
Georg Brandl035cedb2010-09-19 09:31:09 +000068 You can avoid having to call this method explicitly if you use the
69 :keyword:`with` statement, which will shutdown the :class:`Executor`
70 (waiting as if :meth:`Executor.shutdown` were called with *wait* set to
71 ``True``)::
Brian Quinlan81c4d362010-09-18 22:35:02 +000072
Georg Brandl035cedb2010-09-19 09:31:09 +000073 import shutil
74 with ThreadPoolExecutor(max_workers=4) as e:
75 e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
76 e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
77 e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
78 e.submit(shutil.copy, 'src3.txt', 'dest4.txt')
Brian Quinlan81c4d362010-09-18 22:35:02 +000079
Brian Quinlan81c4d362010-09-18 22:35:02 +000080
81ThreadPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +000082------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +000083
Benjamin Petersonc713fc72010-09-19 04:23:17 +000084:class:`ThreadPoolExecutor` is a :class:`Executor` subclass that uses a pool of
85threads to execute calls asynchronously.
Brian Quinlan81c4d362010-09-18 22:35:02 +000086
Benjamin Petersonc713fc72010-09-19 04:23:17 +000087Deadlocks can occur when the callable associated with a :class:`Future` waits on
Georg Brandl035cedb2010-09-19 09:31:09 +000088the results of another :class:`Future`. For example::
Brian Quinlan81c4d362010-09-18 22:35:02 +000089
Georg Brandl035cedb2010-09-19 09:31:09 +000090 import time
91 def wait_on_b():
92 time.sleep(5)
93 print(b.result()) # b will never complete because it is waiting on a.
94 return 5
Brian Quinlan81c4d362010-09-18 22:35:02 +000095
Georg Brandl035cedb2010-09-19 09:31:09 +000096 def wait_on_a():
97 time.sleep(5)
98 print(a.result()) # a will never complete because it is waiting on b.
99 return 6
Brian Quinlan81c4d362010-09-18 22:35:02 +0000100
101
Georg Brandl035cedb2010-09-19 09:31:09 +0000102 executor = ThreadPoolExecutor(max_workers=2)
103 a = executor.submit(wait_on_b)
104 b = executor.submit(wait_on_a)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000105
Georg Brandl035cedb2010-09-19 09:31:09 +0000106And::
Brian Quinlan81c4d362010-09-18 22:35:02 +0000107
Georg Brandl035cedb2010-09-19 09:31:09 +0000108 def wait_on_future():
109 f = executor.submit(pow, 5, 2)
110 # This will never complete because there is only one worker thread and
111 # it is executing this function.
112 print(f.result())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000113
Georg Brandl035cedb2010-09-19 09:31:09 +0000114 executor = ThreadPoolExecutor(max_workers=1)
115 executor.submit(wait_on_future)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000116
117
Guido van Rossumcfd46612014-09-02 10:39:18 -0700118.. class:: ThreadPoolExecutor(max_workers=None)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000119
120 An :class:`Executor` subclass that uses a pool of at most *max_workers*
121 threads to execute calls asynchronously.
122
Guido van Rossumcfd46612014-09-02 10:39:18 -0700123 .. versionchanged:: 3.5
124 If *max_workers* is ``None`` or
125 not given, it will default to the number of processors on the machine,
126 multiplied by ``5``, assuming that :class:`ThreadPoolExecutor` is often
127 used to overlap I/O instead of CPU work and the number of workers
128 should be higher than the number of workers
129 for :class:`ProcessPoolExecutor`.
130
Georg Brandl035cedb2010-09-19 09:31:09 +0000131
Brian Quinlan81c4d362010-09-18 22:35:02 +0000132.. _threadpoolexecutor-example:
133
134ThreadPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000135~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000136::
137
Georg Brandl035cedb2010-09-19 09:31:09 +0000138 import concurrent.futures
139 import urllib.request
Brian Quinlan81c4d362010-09-18 22:35:02 +0000140
Georg Brandl035cedb2010-09-19 09:31:09 +0000141 URLS = ['http://www.foxnews.com/',
142 'http://www.cnn.com/',
143 'http://europe.wsj.com/',
144 'http://www.bbc.co.uk/',
145 'http://some-made-up-domain.com/']
Brian Quinlan81c4d362010-09-18 22:35:02 +0000146
Nick Coghlanf06ea252012-10-16 22:50:04 +1000147 # Retrieve a single page and report the url and contents
Georg Brandl035cedb2010-09-19 09:31:09 +0000148 def load_url(url, timeout):
Nick Coghlanf06ea252012-10-16 22:50:04 +1000149 conn = urllib.request.urlopen(url, timeout=timeout)
150 return conn.readall()
Brian Quinlan81c4d362010-09-18 22:35:02 +0000151
Nick Coghlanf06ea252012-10-16 22:50:04 +1000152 # We can use a with statement to ensure threads are cleaned up promptly
Georg Brandl035cedb2010-09-19 09:31:09 +0000153 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000154 # Start the load operations and mark each future with its URL
Georg Brandl0a1bc112013-03-23 15:59:46 +0100155 future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
Nick Coghland6d5cf32012-10-16 23:14:03 +1000156 for future in concurrent.futures.as_completed(future_to_url):
Nick Coghlan40c67732012-10-20 20:13:21 +1000157 url = future_to_url[future]
Nick Coghlanf06ea252012-10-16 22:50:04 +1000158 try:
159 data = future.result()
160 except Exception as exc:
161 print('%r generated an exception: %s' % (url, exc))
Georg Brandl035cedb2010-09-19 09:31:09 +0000162 else:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000163 print('%r page is %d bytes' % (url, len(data)))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000164
165
166ProcessPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +0000167-------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000168
169The :class:`ProcessPoolExecutor` class is an :class:`Executor` subclass that
170uses a pool of processes to execute calls asynchronously.
171:class:`ProcessPoolExecutor` uses the :mod:`multiprocessing` module, which
172allows it to side-step the :term:`Global Interpreter Lock` but also means that
173only picklable objects can be executed and returned.
174
bquinlan7749cb52013-10-26 04:49:55 +1100175The ``__main__`` module must be importable by worker subprocesses. This means
176that :class:`ProcessPoolExecutor` will not work in the interactive interpreter.
177
Brian Quinlan81c4d362010-09-18 22:35:02 +0000178Calling :class:`Executor` or :class:`Future` methods from a callable submitted
179to a :class:`ProcessPoolExecutor` will result in deadlock.
180
181.. class:: ProcessPoolExecutor(max_workers=None)
182
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000183 An :class:`Executor` subclass that executes calls asynchronously using a pool
Georg Brandl035cedb2010-09-19 09:31:09 +0000184 of at most *max_workers* processes. If *max_workers* is ``None`` or not
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000185 given, it will default to the number of processors on the machine.
Brian Quinlan20efceb2014-05-17 13:51:10 -0700186 If *max_workers* is lower or equal to ``0``, then a :exc:`ValueError`
187 will be raised.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000188
Antoine Pitroudd696492011-06-08 17:21:55 +0200189 .. versionchanged:: 3.3
190 When one of the worker processes terminates abruptly, a
191 :exc:`BrokenProcessPool` error is now raised. Previously, behaviour
192 was undefined but operations on the executor or its futures would often
193 freeze or deadlock.
194
Georg Brandl035cedb2010-09-19 09:31:09 +0000195
Brian Quinlan81c4d362010-09-18 22:35:02 +0000196.. _processpoolexecutor-example:
197
198ProcessPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000199~~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000200::
201
Georg Brandl035cedb2010-09-19 09:31:09 +0000202 import concurrent.futures
203 import math
Brian Quinlan81c4d362010-09-18 22:35:02 +0000204
Georg Brandl035cedb2010-09-19 09:31:09 +0000205 PRIMES = [
206 112272535095293,
207 112582705942171,
208 112272535095293,
209 115280095190773,
210 115797848077099,
211 1099726899285419]
Brian Quinlan81c4d362010-09-18 22:35:02 +0000212
Georg Brandl035cedb2010-09-19 09:31:09 +0000213 def is_prime(n):
214 if n % 2 == 0:
215 return False
Brian Quinlan81c4d362010-09-18 22:35:02 +0000216
Georg Brandl035cedb2010-09-19 09:31:09 +0000217 sqrt_n = int(math.floor(math.sqrt(n)))
218 for i in range(3, sqrt_n + 1, 2):
219 if n % i == 0:
220 return False
221 return True
Brian Quinlan81c4d362010-09-18 22:35:02 +0000222
Georg Brandl035cedb2010-09-19 09:31:09 +0000223 def main():
224 with concurrent.futures.ProcessPoolExecutor() as executor:
225 for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
226 print('%d is prime: %s' % (number, prime))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000227
Georg Brandl035cedb2010-09-19 09:31:09 +0000228 if __name__ == '__main__':
229 main()
230
Brian Quinlan81c4d362010-09-18 22:35:02 +0000231
232Future Objects
Georg Brandl035cedb2010-09-19 09:31:09 +0000233--------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000234
Georg Brandl6faee4e2010-09-21 14:48:28 +0000235The :class:`Future` class encapsulates the asynchronous execution of a callable.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000236:class:`Future` instances are created by :meth:`Executor.submit`.
237
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000238.. class:: Future
Brian Quinlan81c4d362010-09-18 22:35:02 +0000239
Georg Brandl6faee4e2010-09-21 14:48:28 +0000240 Encapsulates the asynchronous execution of a callable. :class:`Future`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000241 instances are created by :meth:`Executor.submit` and should not be created
242 directly except for testing.
243
244 .. method:: cancel()
245
Georg Brandl035cedb2010-09-19 09:31:09 +0000246 Attempt to cancel the call. If the call is currently being executed and
Eric Smith7b5011b2011-02-01 21:31:22 +0000247 cannot be cancelled then the method will return ``False``, otherwise the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000248 call will be cancelled and the method will return ``True``.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000249
250 .. method:: cancelled()
251
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000252 Return ``True`` if the call was successfully cancelled.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000253
254 .. method:: running()
255
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000256 Return ``True`` if the call is currently being executed and cannot be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000257 cancelled.
258
259 .. method:: done()
260
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000261 Return ``True`` if the call was successfully cancelled or finished
262 running.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000263
264 .. method:: result(timeout=None)
265
266 Return the value returned by the call. If the call hasn't yet completed
Georg Brandl035cedb2010-09-19 09:31:09 +0000267 then this method will wait up to *timeout* seconds. If the call hasn't
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000268 completed in *timeout* seconds, then a :exc:`TimeoutError` will be
Georg Brandl035cedb2010-09-19 09:31:09 +0000269 raised. *timeout* can be an int or float. If *timeout* is not specified
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000270 or ``None``, there is no limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000271
272 If the future is cancelled before completing then :exc:`CancelledError`
273 will be raised.
274
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000275 If the call raised, this method will raise the same exception.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000276
277 .. method:: exception(timeout=None)
278
Georg Brandl035cedb2010-09-19 09:31:09 +0000279 Return the exception raised by the call. If the call hasn't yet
280 completed then this method will wait up to *timeout* seconds. If the
281 call hasn't completed in *timeout* seconds, then a :exc:`TimeoutError`
282 will be raised. *timeout* can be an int or float. If *timeout* is not
283 specified or ``None``, there is no limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000284
285 If the future is cancelled before completing then :exc:`CancelledError`
286 will be raised.
287
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000288 If the call completed without raising, ``None`` is returned.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000289
290 .. method:: add_done_callback(fn)
291
Georg Brandl035cedb2010-09-19 09:31:09 +0000292 Attaches the callable *fn* to the future. *fn* will be called, with the
Brian Quinlan81c4d362010-09-18 22:35:02 +0000293 future as its only argument, when the future is cancelled or finishes
294 running.
295
296 Added callables are called in the order that they were added and are
Georg Brandl035cedb2010-09-19 09:31:09 +0000297 always called in a thread belonging to the process that added them. If
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000298 the callable raises a :exc:`Exception` subclass, it will be logged and
Georg Brandl035cedb2010-09-19 09:31:09 +0000299 ignored. If the callable raises a :exc:`BaseException` subclass, the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000300 behavior is undefined.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000301
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000302 If the future has already completed or been cancelled, *fn* will be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000303 called immediately.
304
305 The following :class:`Future` methods are meant for use in unit tests and
306 :class:`Executor` implementations.
307
308 .. method:: set_running_or_notify_cancel()
309
310 This method should only be called by :class:`Executor` implementations
Georg Brandl035cedb2010-09-19 09:31:09 +0000311 before executing the work associated with the :class:`Future` and by unit
312 tests.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000313
Senthil Kumaran916bd382010-10-15 12:55:19 +0000314 If the method returns ``False`` then the :class:`Future` was cancelled,
Georg Brandl035cedb2010-09-19 09:31:09 +0000315 i.e. :meth:`Future.cancel` was called and returned `True`. Any threads
316 waiting on the :class:`Future` completing (i.e. through
317 :func:`as_completed` or :func:`wait`) will be woken up.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000318
Senthil Kumaran916bd382010-10-15 12:55:19 +0000319 If the method returns ``True`` then the :class:`Future` was not cancelled
Georg Brandl035cedb2010-09-19 09:31:09 +0000320 and has been put in the running state, i.e. calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +0000321 :meth:`Future.running` will return `True`.
322
323 This method can only be called once and cannot be called after
324 :meth:`Future.set_result` or :meth:`Future.set_exception` have been
325 called.
326
327 .. method:: set_result(result)
328
329 Sets the result of the work associated with the :class:`Future` to
330 *result*.
331
332 This method should only be used by :class:`Executor` implementations and
333 unit tests.
334
335 .. method:: set_exception(exception)
336
337 Sets the result of the work associated with the :class:`Future` to the
338 :class:`Exception` *exception*.
339
340 This method should only be used by :class:`Executor` implementations and
341 unit tests.
342
343
344Module Functions
Georg Brandl035cedb2010-09-19 09:31:09 +0000345----------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000346
347.. function:: wait(fs, timeout=None, return_when=ALL_COMPLETED)
348
349 Wait for the :class:`Future` instances (possibly created by different
Georg Brandl035cedb2010-09-19 09:31:09 +0000350 :class:`Executor` instances) given by *fs* to complete. Returns a named
351 2-tuple of sets. The first set, named ``done``, contains the futures that
352 completed (finished or were cancelled) before the wait completed. The second
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000353 set, named ``not_done``, contains uncompleted futures.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000354
355 *timeout* can be used to control the maximum number of seconds to wait before
Georg Brandl035cedb2010-09-19 09:31:09 +0000356 returning. *timeout* can be an int or float. If *timeout* is not specified
357 or ``None``, there is no limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000358
Georg Brandl035cedb2010-09-19 09:31:09 +0000359 *return_when* indicates when this function should return. It must be one of
Brian Quinlan81c4d362010-09-18 22:35:02 +0000360 the following constants:
361
Georg Brandl44ea77b2013-03-28 13:28:44 +0100362 .. tabularcolumns:: |l|L|
363
Georg Brandl035cedb2010-09-19 09:31:09 +0000364 +-----------------------------+----------------------------------------+
365 | Constant | Description |
366 +=============================+========================================+
367 | :const:`FIRST_COMPLETED` | The function will return when any |
368 | | future finishes or is cancelled. |
369 +-----------------------------+----------------------------------------+
370 | :const:`FIRST_EXCEPTION` | The function will return when any |
371 | | future finishes by raising an |
372 | | exception. If no future raises an |
373 | | exception then it is equivalent to |
374 | | :const:`ALL_COMPLETED`. |
375 +-----------------------------+----------------------------------------+
376 | :const:`ALL_COMPLETED` | The function will return when all |
377 | | futures finish or are cancelled. |
378 +-----------------------------+----------------------------------------+
Brian Quinlan81c4d362010-09-18 22:35:02 +0000379
380.. function:: as_completed(fs, timeout=None)
381
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000382 Returns an iterator over the :class:`Future` instances (possibly created by
383 different :class:`Executor` instances) given by *fs* that yields futures as
Guido van Rossume6994ff2014-01-26 09:57:51 -0800384 they complete (finished or were cancelled). Any futures given by *fs* that
385 are duplicated will be returned once. Any futures that completed
Georg Brandl035cedb2010-09-19 09:31:09 +0000386 before :func:`as_completed` is called will be yielded first. The returned
Ezio Melotti7fa82222012-10-12 13:42:08 +0300387 iterator raises a :exc:`TimeoutError` if :meth:`~iterator.__next__` is
388 called and the result isn't available after *timeout* seconds from the
389 original call to :func:`as_completed`. *timeout* can be an int or float.
390 If *timeout* is not specified or ``None``, there is no limit to the wait
391 time.
Georg Brandl035cedb2010-09-19 09:31:09 +0000392
393
394.. seealso::
395
396 :pep:`3148` -- futures - execute computations asynchronously
397 The proposal which described this feature for inclusion in the Python
398 standard library.
Antoine Pitroudd696492011-06-08 17:21:55 +0200399
400
401Exception classes
402-----------------
403
404.. exception:: BrokenProcessPool
405
406 Derived from :exc:`RuntimeError`, this exception class is raised when
407 one of the workers of a :class:`ProcessPoolExecutor` has terminated
408 in a non-clean fashion (for example, if it was killed from the outside).
409
410 .. versionadded:: 3.3
411