blob: d4b698e1c17d5f43ecade880244de70175c40864 [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
Antoine Pitrou4aae2762014-10-04 20:20:10 +020041 .. method:: map(func, *iterables, timeout=None, chunksize=1)
Brian Quinlan81c4d362010-09-18 22:35:02 +000042
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
Senthil Kumaran9e9f8502016-01-18 18:45:00 -080045 returned iterator raises a :exc:`concurrent.futures.TimeoutError` if
Ezio Melotti7fa82222012-10-12 13:42:08 +030046 :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
Antoine Pitrou4aae2762014-10-04 20:20:10 +020051 retrieved from the iterator. When using :class:`ProcessPoolExecutor`, this
52 method chops *iterables* into a number of chunks which it submits to the
53 pool as separate tasks. The (approximate) size of these chunks can be
54 specified by setting *chunksize* to a positive integer. For very long
55 iterables, using a large value for *chunksize* can significantly improve
56 performance compared to the default size of 1. With :class:`ThreadPoolExecutor`,
57 *chunksize* has no effect.
58
59 .. versionchanged:: 3.5
60 Added the *chunksize* argument.
Brian Quinlan81c4d362010-09-18 22:35:02 +000061
62 .. method:: shutdown(wait=True)
63
64 Signal the executor that it should free any resources that it is using
Georg Brandl035cedb2010-09-19 09:31:09 +000065 when the currently pending futures are done executing. Calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +000066 :meth:`Executor.submit` and :meth:`Executor.map` made after shutdown will
67 raise :exc:`RuntimeError`.
68
Benjamin Petersonc713fc72010-09-19 04:23:17 +000069 If *wait* is ``True`` then this method will not return until all the
Brian Quinlan81c4d362010-09-18 22:35:02 +000070 pending futures are done executing and the resources associated with the
Georg Brandl035cedb2010-09-19 09:31:09 +000071 executor have been freed. If *wait* is ``False`` then this method will
Benjamin Petersonc713fc72010-09-19 04:23:17 +000072 return immediately and the resources associated with the executor will be
Georg Brandl035cedb2010-09-19 09:31:09 +000073 freed when all pending futures are done executing. Regardless of the
Brian Quinlan81c4d362010-09-18 22:35:02 +000074 value of *wait*, the entire Python program will not exit until all
75 pending futures are done executing.
76
Georg Brandl035cedb2010-09-19 09:31:09 +000077 You can avoid having to call this method explicitly if you use the
78 :keyword:`with` statement, which will shutdown the :class:`Executor`
79 (waiting as if :meth:`Executor.shutdown` were called with *wait* set to
80 ``True``)::
Brian Quinlan81c4d362010-09-18 22:35:02 +000081
Georg Brandl035cedb2010-09-19 09:31:09 +000082 import shutil
83 with ThreadPoolExecutor(max_workers=4) as e:
84 e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
85 e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
86 e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
Berker Peksag0b0c3b62015-09-15 19:59:03 +030087 e.submit(shutil.copy, 'src4.txt', 'dest4.txt')
Brian Quinlan81c4d362010-09-18 22:35:02 +000088
Brian Quinlan81c4d362010-09-18 22:35:02 +000089
90ThreadPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +000091------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +000092
Martin Panter7462b6492015-11-02 03:37:02 +000093:class:`ThreadPoolExecutor` is an :class:`Executor` subclass that uses a pool of
Benjamin Petersonc713fc72010-09-19 04:23:17 +000094threads to execute calls asynchronously.
Brian Quinlan81c4d362010-09-18 22:35:02 +000095
Benjamin Petersonc713fc72010-09-19 04:23:17 +000096Deadlocks can occur when the callable associated with a :class:`Future` waits on
Georg Brandl035cedb2010-09-19 09:31:09 +000097the results of another :class:`Future`. For example::
Brian Quinlan81c4d362010-09-18 22:35:02 +000098
Georg Brandl035cedb2010-09-19 09:31:09 +000099 import time
100 def wait_on_b():
101 time.sleep(5)
Serhiy Storchakadba90392016-05-10 12:01:23 +0300102 print(b.result()) # b will never complete because it is waiting on a.
Georg Brandl035cedb2010-09-19 09:31:09 +0000103 return 5
Brian Quinlan81c4d362010-09-18 22:35:02 +0000104
Georg Brandl035cedb2010-09-19 09:31:09 +0000105 def wait_on_a():
106 time.sleep(5)
Serhiy Storchakadba90392016-05-10 12:01:23 +0300107 print(a.result()) # a will never complete because it is waiting on b.
Georg Brandl035cedb2010-09-19 09:31:09 +0000108 return 6
Brian Quinlan81c4d362010-09-18 22:35:02 +0000109
110
Georg Brandl035cedb2010-09-19 09:31:09 +0000111 executor = ThreadPoolExecutor(max_workers=2)
112 a = executor.submit(wait_on_b)
113 b = executor.submit(wait_on_a)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000114
Georg Brandl035cedb2010-09-19 09:31:09 +0000115And::
Brian Quinlan81c4d362010-09-18 22:35:02 +0000116
Georg Brandl035cedb2010-09-19 09:31:09 +0000117 def wait_on_future():
118 f = executor.submit(pow, 5, 2)
119 # This will never complete because there is only one worker thread and
120 # it is executing this function.
121 print(f.result())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000122
Georg Brandl035cedb2010-09-19 09:31:09 +0000123 executor = ThreadPoolExecutor(max_workers=1)
124 executor.submit(wait_on_future)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000125
126
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100127.. class:: ThreadPoolExecutor(max_workers=None, thread_name_prefix='', initializer=None, initargs=())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000128
129 An :class:`Executor` subclass that uses a pool of at most *max_workers*
130 threads to execute calls asynchronously.
131
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100132 *initializer* is an optional callable that is called at the start of
133 each worker thread; *initargs* is a tuple of arguments passed to the
134 initializer. Should *initializer* raise an exception, all currently
135 pending jobs will raise a :exc:`~concurrent.futures.thread.BrokenThreadPool`,
136 as well any attempt to submit more jobs to the pool.
137
Guido van Rossumcfd46612014-09-02 10:39:18 -0700138 .. versionchanged:: 3.5
139 If *max_workers* is ``None`` or
140 not given, it will default to the number of processors on the machine,
141 multiplied by ``5``, assuming that :class:`ThreadPoolExecutor` is often
142 used to overlap I/O instead of CPU work and the number of workers
143 should be higher than the number of workers
144 for :class:`ProcessPoolExecutor`.
145
Gregory P. Smith50abe872016-08-07 10:19:20 -0700146 .. versionadded:: 3.6
147 The *thread_name_prefix* argument was added to allow users to
148 control the threading.Thread names for worker threads created by
149 the pool for easier debugging.
Georg Brandl035cedb2010-09-19 09:31:09 +0000150
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100151 .. versionchanged:: 3.7
152 Added the *initializer* and *initargs* arguments.
153
154
Brian Quinlan81c4d362010-09-18 22:35:02 +0000155.. _threadpoolexecutor-example:
156
157ThreadPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000158~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000159::
160
Georg Brandl035cedb2010-09-19 09:31:09 +0000161 import concurrent.futures
162 import urllib.request
Brian Quinlan81c4d362010-09-18 22:35:02 +0000163
Georg Brandl035cedb2010-09-19 09:31:09 +0000164 URLS = ['http://www.foxnews.com/',
165 'http://www.cnn.com/',
166 'http://europe.wsj.com/',
167 'http://www.bbc.co.uk/',
168 'http://some-made-up-domain.com/']
Brian Quinlan81c4d362010-09-18 22:35:02 +0000169
Martin Panterfe289c02016-05-28 02:20:39 +0000170 # Retrieve a single page and report the URL and contents
Georg Brandl035cedb2010-09-19 09:31:09 +0000171 def load_url(url, timeout):
Berker Peksag9575e182015-04-12 13:52:49 +0300172 with urllib.request.urlopen(url, timeout=timeout) as conn:
173 return conn.read()
Brian Quinlan81c4d362010-09-18 22:35:02 +0000174
Nick Coghlanf06ea252012-10-16 22:50:04 +1000175 # We can use a with statement to ensure threads are cleaned up promptly
Georg Brandl035cedb2010-09-19 09:31:09 +0000176 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000177 # Start the load operations and mark each future with its URL
Georg Brandl0a1bc112013-03-23 15:59:46 +0100178 future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
Nick Coghland6d5cf32012-10-16 23:14:03 +1000179 for future in concurrent.futures.as_completed(future_to_url):
Nick Coghlan40c67732012-10-20 20:13:21 +1000180 url = future_to_url[future]
Nick Coghlanf06ea252012-10-16 22:50:04 +1000181 try:
182 data = future.result()
183 except Exception as exc:
184 print('%r generated an exception: %s' % (url, exc))
Georg Brandl035cedb2010-09-19 09:31:09 +0000185 else:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000186 print('%r page is %d bytes' % (url, len(data)))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000187
188
189ProcessPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +0000190-------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000191
192The :class:`ProcessPoolExecutor` class is an :class:`Executor` subclass that
193uses a pool of processes to execute calls asynchronously.
194:class:`ProcessPoolExecutor` uses the :mod:`multiprocessing` module, which
195allows it to side-step the :term:`Global Interpreter Lock` but also means that
196only picklable objects can be executed and returned.
197
bquinlan7749cb52013-10-26 04:49:55 +1100198The ``__main__`` module must be importable by worker subprocesses. This means
199that :class:`ProcessPoolExecutor` will not work in the interactive interpreter.
200
Brian Quinlan81c4d362010-09-18 22:35:02 +0000201Calling :class:`Executor` or :class:`Future` methods from a callable submitted
202to a :class:`ProcessPoolExecutor` will result in deadlock.
203
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100204.. class:: ProcessPoolExecutor(max_workers=None, mp_context=None, initializer=None, initargs=())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000205
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000206 An :class:`Executor` subclass that executes calls asynchronously using a pool
Georg Brandl035cedb2010-09-19 09:31:09 +0000207 of at most *max_workers* processes. If *max_workers* is ``None`` or not
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000208 given, it will default to the number of processors on the machine.
Brian Quinlan20efceb2014-05-17 13:51:10 -0700209 If *max_workers* is lower or equal to ``0``, then a :exc:`ValueError`
210 will be raised.
Thomas Moreaue8c368d2017-10-03 11:53:17 +0200211 *mp_context* can be a multiprocessing context or None. It will be used to
212 launch the workers. If *mp_context* is ``None`` or not given, the default
213 multiprocessing context is used.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000214
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100215 *initializer* is an optional callable that is called at the start of
216 each worker process; *initargs* is a tuple of arguments passed to the
217 initializer. Should *initializer* raise an exception, all currently
218 pending jobs will raise a :exc:`~concurrent.futures.thread.BrokenThreadPool`,
219 as well any attempt to submit more jobs to the pool.
220
Antoine Pitroudd696492011-06-08 17:21:55 +0200221 .. versionchanged:: 3.3
222 When one of the worker processes terminates abruptly, a
223 :exc:`BrokenProcessPool` error is now raised. Previously, behaviour
224 was undefined but operations on the executor or its futures would often
225 freeze or deadlock.
226
Thomas Moreaue8c368d2017-10-03 11:53:17 +0200227 .. versionchanged:: 3.7
228 The *mp_context* argument was added to allow users to control the
229 start_method for worker processes created by the pool.
230
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100231 Added the *initializer* and *initargs* arguments.
232
Georg Brandl035cedb2010-09-19 09:31:09 +0000233
Brian Quinlan81c4d362010-09-18 22:35:02 +0000234.. _processpoolexecutor-example:
235
236ProcessPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000237~~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000238::
239
Georg Brandl035cedb2010-09-19 09:31:09 +0000240 import concurrent.futures
241 import math
Brian Quinlan81c4d362010-09-18 22:35:02 +0000242
Georg Brandl035cedb2010-09-19 09:31:09 +0000243 PRIMES = [
244 112272535095293,
245 112582705942171,
246 112272535095293,
247 115280095190773,
248 115797848077099,
249 1099726899285419]
Brian Quinlan81c4d362010-09-18 22:35:02 +0000250
Georg Brandl035cedb2010-09-19 09:31:09 +0000251 def is_prime(n):
252 if n % 2 == 0:
253 return False
Brian Quinlan81c4d362010-09-18 22:35:02 +0000254
Georg Brandl035cedb2010-09-19 09:31:09 +0000255 sqrt_n = int(math.floor(math.sqrt(n)))
256 for i in range(3, sqrt_n + 1, 2):
257 if n % i == 0:
258 return False
259 return True
Brian Quinlan81c4d362010-09-18 22:35:02 +0000260
Georg Brandl035cedb2010-09-19 09:31:09 +0000261 def main():
262 with concurrent.futures.ProcessPoolExecutor() as executor:
263 for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
264 print('%d is prime: %s' % (number, prime))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000265
Georg Brandl035cedb2010-09-19 09:31:09 +0000266 if __name__ == '__main__':
267 main()
268
Brian Quinlan81c4d362010-09-18 22:35:02 +0000269
270Future Objects
Georg Brandl035cedb2010-09-19 09:31:09 +0000271--------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000272
Georg Brandl6faee4e2010-09-21 14:48:28 +0000273The :class:`Future` class encapsulates the asynchronous execution of a callable.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000274:class:`Future` instances are created by :meth:`Executor.submit`.
275
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000276.. class:: Future
Brian Quinlan81c4d362010-09-18 22:35:02 +0000277
Georg Brandl6faee4e2010-09-21 14:48:28 +0000278 Encapsulates the asynchronous execution of a callable. :class:`Future`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000279 instances are created by :meth:`Executor.submit` and should not be created
280 directly except for testing.
281
282 .. method:: cancel()
283
Georg Brandl035cedb2010-09-19 09:31:09 +0000284 Attempt to cancel the call. If the call is currently being executed and
Eric Smith7b5011b2011-02-01 21:31:22 +0000285 cannot be cancelled then the method will return ``False``, otherwise the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000286 call will be cancelled and the method will return ``True``.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000287
288 .. method:: cancelled()
289
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000290 Return ``True`` if the call was successfully cancelled.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000291
292 .. method:: running()
293
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000294 Return ``True`` if the call is currently being executed and cannot be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000295 cancelled.
296
297 .. method:: done()
298
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000299 Return ``True`` if the call was successfully cancelled or finished
300 running.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000301
302 .. method:: result(timeout=None)
303
304 Return the value returned by the call. If the call hasn't yet completed
Georg Brandl035cedb2010-09-19 09:31:09 +0000305 then this method will wait up to *timeout* seconds. If the call hasn't
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800306 completed in *timeout* seconds, then a
307 :exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
308 an int or float. If *timeout* is not specified or ``None``, there is no
309 limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000310
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800311 If the future is cancelled before completing then :exc:`.CancelledError`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000312 will be raised.
313
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000314 If the call raised, this method will raise the same exception.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000315
316 .. method:: exception(timeout=None)
317
Georg Brandl035cedb2010-09-19 09:31:09 +0000318 Return the exception raised by the call. If the call hasn't yet
319 completed then this method will wait up to *timeout* seconds. If the
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800320 call hasn't completed in *timeout* seconds, then a
321 :exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
322 an int or float. If *timeout* is not specified or ``None``, there is no
323 limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000324
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800325 If the future is cancelled before completing then :exc:`.CancelledError`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000326 will be raised.
327
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000328 If the call completed without raising, ``None`` is returned.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000329
330 .. method:: add_done_callback(fn)
331
Georg Brandl035cedb2010-09-19 09:31:09 +0000332 Attaches the callable *fn* to the future. *fn* will be called, with the
Brian Quinlan81c4d362010-09-18 22:35:02 +0000333 future as its only argument, when the future is cancelled or finishes
334 running.
335
336 Added callables are called in the order that they were added and are
Georg Brandl035cedb2010-09-19 09:31:09 +0000337 always called in a thread belonging to the process that added them. If
Martin Panter7462b6492015-11-02 03:37:02 +0000338 the callable raises an :exc:`Exception` subclass, it will be logged and
Georg Brandl035cedb2010-09-19 09:31:09 +0000339 ignored. If the callable raises a :exc:`BaseException` subclass, the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000340 behavior is undefined.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000341
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000342 If the future has already completed or been cancelled, *fn* will be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000343 called immediately.
344
345 The following :class:`Future` methods are meant for use in unit tests and
346 :class:`Executor` implementations.
347
348 .. method:: set_running_or_notify_cancel()
349
350 This method should only be called by :class:`Executor` implementations
Georg Brandl035cedb2010-09-19 09:31:09 +0000351 before executing the work associated with the :class:`Future` and by unit
352 tests.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000353
Senthil Kumaran916bd382010-10-15 12:55:19 +0000354 If the method returns ``False`` then the :class:`Future` was cancelled,
Georg Brandl035cedb2010-09-19 09:31:09 +0000355 i.e. :meth:`Future.cancel` was called and returned `True`. Any threads
356 waiting on the :class:`Future` completing (i.e. through
357 :func:`as_completed` or :func:`wait`) will be woken up.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000358
Senthil Kumaran916bd382010-10-15 12:55:19 +0000359 If the method returns ``True`` then the :class:`Future` was not cancelled
Georg Brandl035cedb2010-09-19 09:31:09 +0000360 and has been put in the running state, i.e. calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +0000361 :meth:`Future.running` will return `True`.
362
363 This method can only be called once and cannot be called after
364 :meth:`Future.set_result` or :meth:`Future.set_exception` have been
365 called.
366
367 .. method:: set_result(result)
368
369 Sets the result of the work associated with the :class:`Future` to
370 *result*.
371
372 This method should only be used by :class:`Executor` implementations and
373 unit tests.
374
375 .. method:: set_exception(exception)
376
377 Sets the result of the work associated with the :class:`Future` to the
378 :class:`Exception` *exception*.
379
380 This method should only be used by :class:`Executor` implementations and
381 unit tests.
382
383
384Module Functions
Georg Brandl035cedb2010-09-19 09:31:09 +0000385----------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000386
387.. function:: wait(fs, timeout=None, return_when=ALL_COMPLETED)
388
389 Wait for the :class:`Future` instances (possibly created by different
Georg Brandl035cedb2010-09-19 09:31:09 +0000390 :class:`Executor` instances) given by *fs* to complete. Returns a named
391 2-tuple of sets. The first set, named ``done``, contains the futures that
392 completed (finished or were cancelled) before the wait completed. The second
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000393 set, named ``not_done``, contains uncompleted futures.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000394
395 *timeout* can be used to control the maximum number of seconds to wait before
Georg Brandl035cedb2010-09-19 09:31:09 +0000396 returning. *timeout* can be an int or float. If *timeout* is not specified
397 or ``None``, there is no limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000398
Georg Brandl035cedb2010-09-19 09:31:09 +0000399 *return_when* indicates when this function should return. It must be one of
Brian Quinlan81c4d362010-09-18 22:35:02 +0000400 the following constants:
401
Georg Brandl44ea77b2013-03-28 13:28:44 +0100402 .. tabularcolumns:: |l|L|
403
Georg Brandl035cedb2010-09-19 09:31:09 +0000404 +-----------------------------+----------------------------------------+
405 | Constant | Description |
406 +=============================+========================================+
407 | :const:`FIRST_COMPLETED` | The function will return when any |
408 | | future finishes or is cancelled. |
409 +-----------------------------+----------------------------------------+
410 | :const:`FIRST_EXCEPTION` | The function will return when any |
411 | | future finishes by raising an |
412 | | exception. If no future raises an |
413 | | exception then it is equivalent to |
414 | | :const:`ALL_COMPLETED`. |
415 +-----------------------------+----------------------------------------+
416 | :const:`ALL_COMPLETED` | The function will return when all |
417 | | futures finish or are cancelled. |
418 +-----------------------------+----------------------------------------+
Brian Quinlan81c4d362010-09-18 22:35:02 +0000419
420.. function:: as_completed(fs, timeout=None)
421
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000422 Returns an iterator over the :class:`Future` instances (possibly created by
423 different :class:`Executor` instances) given by *fs* that yields futures as
Guido van Rossume6994ff2014-01-26 09:57:51 -0800424 they complete (finished or were cancelled). Any futures given by *fs* that
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800425 are duplicated will be returned once. Any futures that completed before
426 :func:`as_completed` is called will be yielded first. The returned iterator
427 raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
428 is called and the result isn't available after *timeout* seconds from the
429 original call to :func:`as_completed`. *timeout* can be an int or float. If
430 *timeout* is not specified or ``None``, there is no limit to the wait time.
Georg Brandl035cedb2010-09-19 09:31:09 +0000431
432
433.. seealso::
434
435 :pep:`3148` -- futures - execute computations asynchronously
436 The proposal which described this feature for inclusion in the Python
437 standard library.
Antoine Pitroudd696492011-06-08 17:21:55 +0200438
439
440Exception classes
441-----------------
442
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800443.. currentmodule:: concurrent.futures
444
445.. exception:: CancelledError
446
447 Raised when a future is cancelled.
448
449.. exception:: TimeoutError
450
451 Raised when a future operation exceeds the given timeout.
452
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100453.. exception:: BrokenExecutor
454
455 Derived from :exc:`RuntimeError`, this exception class is raised
456 when an executor is broken for some reason, and cannot be used
457 to submit or execute new tasks.
458
459 .. versionadded:: 3.7
460
461.. currentmodule:: concurrent.futures.thread
462
463.. exception:: BrokenThreadPool
464
465 Derived from :exc:`~concurrent.futures.BrokenExecutor`, this exception
466 class is raised when one of the workers of a :class:`ThreadPoolExecutor`
467 has failed initializing.
468
469 .. versionadded:: 3.7
470
Georg Brandlce64ced2014-10-28 22:58:24 +0100471.. currentmodule:: concurrent.futures.process
472
Antoine Pitroudd696492011-06-08 17:21:55 +0200473.. exception:: BrokenProcessPool
474
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100475 Derived from :exc:`~concurrent.futures.BrokenExecutor` (formerly
476 :exc:`RuntimeError`), this exception class is raised when one of the
477 workers of a :class:`ProcessPoolExecutor` has terminated in a non-clean
478 fashion (for example, if it was killed from the outside).
Antoine Pitroudd696492011-06-08 17:21:55 +0200479
480 .. versionadded:: 3.3