blob: 34905c449d7f8b5917be1d9f85770f072eb7a251 [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
Serhiy Storchaka142566c2019-06-05 18:22:31 +030031 .. method:: submit(fn, /, *args, **kwargs)
Brian Quinlan81c4d362010-09-18 22:35:02 +000032
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
Antoine Pitroua7a751d2017-12-20 19:06:20 +010043 Similar to :func:`map(func, *iterables) <map>` except:
44
45 * the *iterables* are collected immediately rather than lazily;
46
47 * *func* is executed asynchronously and several calls to
48 *func* may be made concurrently.
49
50 The returned iterator raises a :exc:`concurrent.futures.TimeoutError`
51 if :meth:`~iterator.__next__` is called and the result isn't available
Ezio Melotti7fa82222012-10-12 13:42:08 +030052 after *timeout* seconds from the original call to :meth:`Executor.map`.
53 *timeout* can be an int or a float. If *timeout* is not specified or
Antoine Pitroua7a751d2017-12-20 19:06:20 +010054 ``None``, there is no limit to the wait time.
55
56 If a *func* call raises an exception, then that exception will be
57 raised when its value is retrieved from the iterator.
58
59 When using :class:`ProcessPoolExecutor`, this method chops *iterables*
60 into a number of chunks which it submits to the pool as separate
61 tasks. The (approximate) size of these chunks can be specified by
62 setting *chunksize* to a positive integer. For very long iterables,
63 using a large value for *chunksize* can significantly improve
64 performance compared to the default size of 1. With
65 :class:`ThreadPoolExecutor`, *chunksize* has no effect.
Antoine Pitrou4aae2762014-10-04 20:20:10 +020066
67 .. versionchanged:: 3.5
68 Added the *chunksize* argument.
Brian Quinlan81c4d362010-09-18 22:35:02 +000069
70 .. method:: shutdown(wait=True)
71
72 Signal the executor that it should free any resources that it is using
Georg Brandl035cedb2010-09-19 09:31:09 +000073 when the currently pending futures are done executing. Calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +000074 :meth:`Executor.submit` and :meth:`Executor.map` made after shutdown will
75 raise :exc:`RuntimeError`.
76
Benjamin Petersonc713fc72010-09-19 04:23:17 +000077 If *wait* is ``True`` then this method will not return until all the
Brian Quinlan81c4d362010-09-18 22:35:02 +000078 pending futures are done executing and the resources associated with the
Georg Brandl035cedb2010-09-19 09:31:09 +000079 executor have been freed. If *wait* is ``False`` then this method will
Benjamin Petersonc713fc72010-09-19 04:23:17 +000080 return immediately and the resources associated with the executor will be
Georg Brandl035cedb2010-09-19 09:31:09 +000081 freed when all pending futures are done executing. Regardless of the
Brian Quinlan81c4d362010-09-18 22:35:02 +000082 value of *wait*, the entire Python program will not exit until all
83 pending futures are done executing.
84
Georg Brandl035cedb2010-09-19 09:31:09 +000085 You can avoid having to call this method explicitly if you use the
86 :keyword:`with` statement, which will shutdown the :class:`Executor`
87 (waiting as if :meth:`Executor.shutdown` were called with *wait* set to
88 ``True``)::
Brian Quinlan81c4d362010-09-18 22:35:02 +000089
Georg Brandl035cedb2010-09-19 09:31:09 +000090 import shutil
91 with ThreadPoolExecutor(max_workers=4) as e:
92 e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
93 e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
94 e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
Berker Peksag0b0c3b62015-09-15 19:59:03 +030095 e.submit(shutil.copy, 'src4.txt', 'dest4.txt')
Brian Quinlan81c4d362010-09-18 22:35:02 +000096
Brian Quinlan81c4d362010-09-18 22:35:02 +000097
98ThreadPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +000099------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000100
Martin Panter7462b6492015-11-02 03:37:02 +0000101:class:`ThreadPoolExecutor` is an :class:`Executor` subclass that uses a pool of
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000102threads to execute calls asynchronously.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000103
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000104Deadlocks can occur when the callable associated with a :class:`Future` waits on
Georg Brandl035cedb2010-09-19 09:31:09 +0000105the results of another :class:`Future`. For example::
Brian Quinlan81c4d362010-09-18 22:35:02 +0000106
Georg Brandl035cedb2010-09-19 09:31:09 +0000107 import time
108 def wait_on_b():
109 time.sleep(5)
Serhiy Storchakadba90392016-05-10 12:01:23 +0300110 print(b.result()) # b will never complete because it is waiting on a.
Georg Brandl035cedb2010-09-19 09:31:09 +0000111 return 5
Brian Quinlan81c4d362010-09-18 22:35:02 +0000112
Georg Brandl035cedb2010-09-19 09:31:09 +0000113 def wait_on_a():
114 time.sleep(5)
Serhiy Storchakadba90392016-05-10 12:01:23 +0300115 print(a.result()) # a will never complete because it is waiting on b.
Georg Brandl035cedb2010-09-19 09:31:09 +0000116 return 6
Brian Quinlan81c4d362010-09-18 22:35:02 +0000117
118
Georg Brandl035cedb2010-09-19 09:31:09 +0000119 executor = ThreadPoolExecutor(max_workers=2)
120 a = executor.submit(wait_on_b)
121 b = executor.submit(wait_on_a)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000122
Georg Brandl035cedb2010-09-19 09:31:09 +0000123And::
Brian Quinlan81c4d362010-09-18 22:35:02 +0000124
Georg Brandl035cedb2010-09-19 09:31:09 +0000125 def wait_on_future():
126 f = executor.submit(pow, 5, 2)
127 # This will never complete because there is only one worker thread and
128 # it is executing this function.
129 print(f.result())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000130
Georg Brandl035cedb2010-09-19 09:31:09 +0000131 executor = ThreadPoolExecutor(max_workers=1)
132 executor.submit(wait_on_future)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000133
134
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100135.. class:: ThreadPoolExecutor(max_workers=None, thread_name_prefix='', initializer=None, initargs=())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000136
137 An :class:`Executor` subclass that uses a pool of at most *max_workers*
138 threads to execute calls asynchronously.
139
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100140 *initializer* is an optional callable that is called at the start of
141 each worker thread; *initargs* is a tuple of arguments passed to the
142 initializer. Should *initializer* raise an exception, all currently
143 pending jobs will raise a :exc:`~concurrent.futures.thread.BrokenThreadPool`,
Matt Wheeler40a61da2018-12-05 21:41:20 +0000144 as well as any attempt to submit more jobs to the pool.
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100145
Guido van Rossumcfd46612014-09-02 10:39:18 -0700146 .. versionchanged:: 3.5
147 If *max_workers* is ``None`` or
148 not given, it will default to the number of processors on the machine,
149 multiplied by ``5``, assuming that :class:`ThreadPoolExecutor` is often
150 used to overlap I/O instead of CPU work and the number of workers
151 should be higher than the number of workers
152 for :class:`ProcessPoolExecutor`.
153
Gregory P. Smith50abe872016-08-07 10:19:20 -0700154 .. versionadded:: 3.6
155 The *thread_name_prefix* argument was added to allow users to
Matt Wheeler40a61da2018-12-05 21:41:20 +0000156 control the :class:`threading.Thread` names for worker threads created by
Gregory P. Smith50abe872016-08-07 10:19:20 -0700157 the pool for easier debugging.
Georg Brandl035cedb2010-09-19 09:31:09 +0000158
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100159 .. versionchanged:: 3.7
160 Added the *initializer* and *initargs* arguments.
161
Inada Naoki9a7e5b12019-05-28 21:02:52 +0900162 .. versionchanged:: 3.8
163 Default value of *max_workers* is changed to ``min(32, os.cpu_count() + 4)``.
164 This default value preserves at least 5 workers for I/O bound tasks.
165 It utilizes at most 32 CPU cores for CPU bound tasks which release the GIL.
166 And it avoids using very large resources implicitly on many-core machines.
167
168 ThreadPoolExecutor now reuses idle worker threads before starting
169 *max_workers* worker threads too.
170
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100171
Brian Quinlan81c4d362010-09-18 22:35:02 +0000172.. _threadpoolexecutor-example:
173
174ThreadPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000175~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000176::
177
Georg Brandl035cedb2010-09-19 09:31:09 +0000178 import concurrent.futures
179 import urllib.request
Brian Quinlan81c4d362010-09-18 22:35:02 +0000180
Georg Brandl035cedb2010-09-19 09:31:09 +0000181 URLS = ['http://www.foxnews.com/',
182 'http://www.cnn.com/',
183 'http://europe.wsj.com/',
184 'http://www.bbc.co.uk/',
185 'http://some-made-up-domain.com/']
Brian Quinlan81c4d362010-09-18 22:35:02 +0000186
Martin Panterfe289c02016-05-28 02:20:39 +0000187 # Retrieve a single page and report the URL and contents
Georg Brandl035cedb2010-09-19 09:31:09 +0000188 def load_url(url, timeout):
Berker Peksag9575e182015-04-12 13:52:49 +0300189 with urllib.request.urlopen(url, timeout=timeout) as conn:
190 return conn.read()
Brian Quinlan81c4d362010-09-18 22:35:02 +0000191
Nick Coghlanf06ea252012-10-16 22:50:04 +1000192 # We can use a with statement to ensure threads are cleaned up promptly
Georg Brandl035cedb2010-09-19 09:31:09 +0000193 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000194 # Start the load operations and mark each future with its URL
Georg Brandl0a1bc112013-03-23 15:59:46 +0100195 future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
Nick Coghland6d5cf32012-10-16 23:14:03 +1000196 for future in concurrent.futures.as_completed(future_to_url):
Nick Coghlan40c67732012-10-20 20:13:21 +1000197 url = future_to_url[future]
Nick Coghlanf06ea252012-10-16 22:50:04 +1000198 try:
199 data = future.result()
200 except Exception as exc:
201 print('%r generated an exception: %s' % (url, exc))
Georg Brandl035cedb2010-09-19 09:31:09 +0000202 else:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000203 print('%r page is %d bytes' % (url, len(data)))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000204
205
206ProcessPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +0000207-------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000208
209The :class:`ProcessPoolExecutor` class is an :class:`Executor` subclass that
210uses a pool of processes to execute calls asynchronously.
211:class:`ProcessPoolExecutor` uses the :mod:`multiprocessing` module, which
212allows it to side-step the :term:`Global Interpreter Lock` but also means that
213only picklable objects can be executed and returned.
214
bquinlan7749cb52013-10-26 04:49:55 +1100215The ``__main__`` module must be importable by worker subprocesses. This means
216that :class:`ProcessPoolExecutor` will not work in the interactive interpreter.
217
Brian Quinlan81c4d362010-09-18 22:35:02 +0000218Calling :class:`Executor` or :class:`Future` methods from a callable submitted
219to a :class:`ProcessPoolExecutor` will result in deadlock.
220
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100221.. class:: ProcessPoolExecutor(max_workers=None, mp_context=None, initializer=None, initargs=())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000222
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000223 An :class:`Executor` subclass that executes calls asynchronously using a pool
Georg Brandl035cedb2010-09-19 09:31:09 +0000224 of at most *max_workers* processes. If *max_workers* is ``None`` or not
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000225 given, it will default to the number of processors on the machine.
Brian Quinlan20efceb2014-05-17 13:51:10 -0700226 If *max_workers* is lower or equal to ``0``, then a :exc:`ValueError`
227 will be raised.
Brian Quinlan39889862019-05-08 14:04:53 -0400228 On Windows, *max_workers* must be equal or lower than ``61``. If it is not
229 then :exc:`ValueError` will be raised. If *max_workers* is ``None``, then
230 the default chosen will be at most ``61``, even if more processors are
231 available.
Thomas Moreaue8c368d2017-10-03 11:53:17 +0200232 *mp_context* can be a multiprocessing context or None. It will be used to
233 launch the workers. If *mp_context* is ``None`` or not given, the default
234 multiprocessing context is used.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000235
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100236 *initializer* is an optional callable that is called at the start of
237 each worker process; *initargs* is a tuple of arguments passed to the
238 initializer. Should *initializer* raise an exception, all currently
Joni Kähäräb60b4682018-09-25 06:30:25 +0300239 pending jobs will raise a :exc:`~concurrent.futures.process.BrokenProcessPool`,
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100240 as well any attempt to submit more jobs to the pool.
241
Antoine Pitroudd696492011-06-08 17:21:55 +0200242 .. versionchanged:: 3.3
243 When one of the worker processes terminates abruptly, a
244 :exc:`BrokenProcessPool` error is now raised. Previously, behaviour
245 was undefined but operations on the executor or its futures would often
246 freeze or deadlock.
247
Thomas Moreaue8c368d2017-10-03 11:53:17 +0200248 .. versionchanged:: 3.7
249 The *mp_context* argument was added to allow users to control the
250 start_method for worker processes created by the pool.
251
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100252 Added the *initializer* and *initargs* arguments.
253
Georg Brandl035cedb2010-09-19 09:31:09 +0000254
Brian Quinlan81c4d362010-09-18 22:35:02 +0000255.. _processpoolexecutor-example:
256
257ProcessPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000258~~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000259::
260
Georg Brandl035cedb2010-09-19 09:31:09 +0000261 import concurrent.futures
262 import math
Brian Quinlan81c4d362010-09-18 22:35:02 +0000263
Georg Brandl035cedb2010-09-19 09:31:09 +0000264 PRIMES = [
265 112272535095293,
266 112582705942171,
267 112272535095293,
268 115280095190773,
269 115797848077099,
270 1099726899285419]
Brian Quinlan81c4d362010-09-18 22:35:02 +0000271
Georg Brandl035cedb2010-09-19 09:31:09 +0000272 def is_prime(n):
Julien Palard8e73ad32018-10-17 08:45:51 +0200273 if n < 2:
274 return False
275 if n == 2:
276 return True
Georg Brandl035cedb2010-09-19 09:31:09 +0000277 if n % 2 == 0:
278 return False
Brian Quinlan81c4d362010-09-18 22:35:02 +0000279
Georg Brandl035cedb2010-09-19 09:31:09 +0000280 sqrt_n = int(math.floor(math.sqrt(n)))
281 for i in range(3, sqrt_n + 1, 2):
282 if n % i == 0:
283 return False
284 return True
Brian Quinlan81c4d362010-09-18 22:35:02 +0000285
Georg Brandl035cedb2010-09-19 09:31:09 +0000286 def main():
287 with concurrent.futures.ProcessPoolExecutor() as executor:
288 for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
289 print('%d is prime: %s' % (number, prime))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000290
Georg Brandl035cedb2010-09-19 09:31:09 +0000291 if __name__ == '__main__':
292 main()
293
Brian Quinlan81c4d362010-09-18 22:35:02 +0000294
295Future Objects
Georg Brandl035cedb2010-09-19 09:31:09 +0000296--------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000297
Georg Brandl6faee4e2010-09-21 14:48:28 +0000298The :class:`Future` class encapsulates the asynchronous execution of a callable.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000299:class:`Future` instances are created by :meth:`Executor.submit`.
300
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000301.. class:: Future
Brian Quinlan81c4d362010-09-18 22:35:02 +0000302
Georg Brandl6faee4e2010-09-21 14:48:28 +0000303 Encapsulates the asynchronous execution of a callable. :class:`Future`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000304 instances are created by :meth:`Executor.submit` and should not be created
305 directly except for testing.
306
307 .. method:: cancel()
308
Georg Brandl035cedb2010-09-19 09:31:09 +0000309 Attempt to cancel the call. If the call is currently being executed and
Eric Smith7b5011b2011-02-01 21:31:22 +0000310 cannot be cancelled then the method will return ``False``, otherwise the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000311 call will be cancelled and the method will return ``True``.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000312
313 .. method:: cancelled()
314
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000315 Return ``True`` if the call was successfully cancelled.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000316
317 .. method:: running()
318
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000319 Return ``True`` if the call is currently being executed and cannot be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000320 cancelled.
321
322 .. method:: done()
323
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000324 Return ``True`` if the call was successfully cancelled or finished
325 running.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000326
327 .. method:: result(timeout=None)
328
329 Return the value returned by the call. If the call hasn't yet completed
Georg Brandl035cedb2010-09-19 09:31:09 +0000330 then this method will wait up to *timeout* seconds. If the call hasn't
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800331 completed in *timeout* seconds, then a
332 :exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
333 an int or float. If *timeout* is not specified or ``None``, there is no
334 limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000335
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800336 If the future is cancelled before completing then :exc:`.CancelledError`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000337 will be raised.
338
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000339 If the call raised, this method will raise the same exception.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000340
341 .. method:: exception(timeout=None)
342
Georg Brandl035cedb2010-09-19 09:31:09 +0000343 Return the exception raised by the call. If the call hasn't yet
344 completed then this method will wait up to *timeout* seconds. If the
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800345 call hasn't completed in *timeout* seconds, then a
346 :exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
347 an int or float. If *timeout* is not specified or ``None``, there is no
348 limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000349
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800350 If the future is cancelled before completing then :exc:`.CancelledError`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000351 will be raised.
352
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000353 If the call completed without raising, ``None`` is returned.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000354
355 .. method:: add_done_callback(fn)
356
Georg Brandl035cedb2010-09-19 09:31:09 +0000357 Attaches the callable *fn* to the future. *fn* will be called, with the
Brian Quinlan81c4d362010-09-18 22:35:02 +0000358 future as its only argument, when the future is cancelled or finishes
359 running.
360
361 Added callables are called in the order that they were added and are
Georg Brandl035cedb2010-09-19 09:31:09 +0000362 always called in a thread belonging to the process that added them. If
Martin Panter7462b6492015-11-02 03:37:02 +0000363 the callable raises an :exc:`Exception` subclass, it will be logged and
Georg Brandl035cedb2010-09-19 09:31:09 +0000364 ignored. If the callable raises a :exc:`BaseException` subclass, the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000365 behavior is undefined.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000366
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000367 If the future has already completed or been cancelled, *fn* will be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000368 called immediately.
369
370 The following :class:`Future` methods are meant for use in unit tests and
371 :class:`Executor` implementations.
372
373 .. method:: set_running_or_notify_cancel()
374
375 This method should only be called by :class:`Executor` implementations
Georg Brandl035cedb2010-09-19 09:31:09 +0000376 before executing the work associated with the :class:`Future` and by unit
377 tests.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000378
Senthil Kumaran916bd382010-10-15 12:55:19 +0000379 If the method returns ``False`` then the :class:`Future` was cancelled,
Georg Brandl035cedb2010-09-19 09:31:09 +0000380 i.e. :meth:`Future.cancel` was called and returned `True`. Any threads
381 waiting on the :class:`Future` completing (i.e. through
382 :func:`as_completed` or :func:`wait`) will be woken up.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000383
Senthil Kumaran916bd382010-10-15 12:55:19 +0000384 If the method returns ``True`` then the :class:`Future` was not cancelled
Georg Brandl035cedb2010-09-19 09:31:09 +0000385 and has been put in the running state, i.e. calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +0000386 :meth:`Future.running` will return `True`.
387
388 This method can only be called once and cannot be called after
389 :meth:`Future.set_result` or :meth:`Future.set_exception` have been
390 called.
391
392 .. method:: set_result(result)
393
394 Sets the result of the work associated with the :class:`Future` to
395 *result*.
396
397 This method should only be used by :class:`Executor` implementations and
398 unit tests.
399
jhaydaman0a28c0d2018-05-30 02:15:06 -0500400 .. versionchanged:: 3.8
401 This method raises
402 :exc:`concurrent.futures.InvalidStateError` if the :class:`Future` is
403 already done.
404
Brian Quinlan81c4d362010-09-18 22:35:02 +0000405 .. method:: set_exception(exception)
406
407 Sets the result of the work associated with the :class:`Future` to the
408 :class:`Exception` *exception*.
409
410 This method should only be used by :class:`Executor` implementations and
411 unit tests.
412
jhaydaman0a28c0d2018-05-30 02:15:06 -0500413 .. versionchanged:: 3.8
414 This method raises
415 :exc:`concurrent.futures.InvalidStateError` if the :class:`Future` is
416 already done.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000417
418Module Functions
Georg Brandl035cedb2010-09-19 09:31:09 +0000419----------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000420
421.. function:: wait(fs, timeout=None, return_when=ALL_COMPLETED)
422
423 Wait for the :class:`Future` instances (possibly created by different
Georg Brandl035cedb2010-09-19 09:31:09 +0000424 :class:`Executor` instances) given by *fs* to complete. Returns a named
425 2-tuple of sets. The first set, named ``done``, contains the futures that
426 completed (finished or were cancelled) before the wait completed. The second
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000427 set, named ``not_done``, contains uncompleted futures.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000428
429 *timeout* can be used to control the maximum number of seconds to wait before
Georg Brandl035cedb2010-09-19 09:31:09 +0000430 returning. *timeout* can be an int or float. If *timeout* is not specified
431 or ``None``, there is no limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000432
Georg Brandl035cedb2010-09-19 09:31:09 +0000433 *return_when* indicates when this function should return. It must be one of
Brian Quinlan81c4d362010-09-18 22:35:02 +0000434 the following constants:
435
Georg Brandl44ea77b2013-03-28 13:28:44 +0100436 .. tabularcolumns:: |l|L|
437
Georg Brandl035cedb2010-09-19 09:31:09 +0000438 +-----------------------------+----------------------------------------+
439 | Constant | Description |
440 +=============================+========================================+
441 | :const:`FIRST_COMPLETED` | The function will return when any |
442 | | future finishes or is cancelled. |
443 +-----------------------------+----------------------------------------+
444 | :const:`FIRST_EXCEPTION` | The function will return when any |
445 | | future finishes by raising an |
446 | | exception. If no future raises an |
447 | | exception then it is equivalent to |
448 | | :const:`ALL_COMPLETED`. |
449 +-----------------------------+----------------------------------------+
450 | :const:`ALL_COMPLETED` | The function will return when all |
451 | | futures finish or are cancelled. |
452 +-----------------------------+----------------------------------------+
Brian Quinlan81c4d362010-09-18 22:35:02 +0000453
454.. function:: as_completed(fs, timeout=None)
455
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000456 Returns an iterator over the :class:`Future` instances (possibly created by
457 different :class:`Executor` instances) given by *fs* that yields futures as
Guido van Rossume6994ff2014-01-26 09:57:51 -0800458 they complete (finished or were cancelled). Any futures given by *fs* that
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800459 are duplicated will be returned once. Any futures that completed before
460 :func:`as_completed` is called will be yielded first. The returned iterator
461 raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
462 is called and the result isn't available after *timeout* seconds from the
463 original call to :func:`as_completed`. *timeout* can be an int or float. If
464 *timeout* is not specified or ``None``, there is no limit to the wait time.
Georg Brandl035cedb2010-09-19 09:31:09 +0000465
466
467.. seealso::
468
469 :pep:`3148` -- futures - execute computations asynchronously
470 The proposal which described this feature for inclusion in the Python
471 standard library.
Antoine Pitroudd696492011-06-08 17:21:55 +0200472
473
474Exception classes
475-----------------
476
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800477.. currentmodule:: concurrent.futures
478
479.. exception:: CancelledError
480
481 Raised when a future is cancelled.
482
483.. exception:: TimeoutError
484
485 Raised when a future operation exceeds the given timeout.
486
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100487.. exception:: BrokenExecutor
488
489 Derived from :exc:`RuntimeError`, this exception class is raised
490 when an executor is broken for some reason, and cannot be used
491 to submit or execute new tasks.
492
493 .. versionadded:: 3.7
494
jhaydaman0a28c0d2018-05-30 02:15:06 -0500495.. exception:: InvalidStateError
496
497 Raised when an operation is performed on a future that is not allowed
498 in the current state.
499
500 .. versionadded:: 3.8
501
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100502.. currentmodule:: concurrent.futures.thread
503
504.. exception:: BrokenThreadPool
505
506 Derived from :exc:`~concurrent.futures.BrokenExecutor`, this exception
507 class is raised when one of the workers of a :class:`ThreadPoolExecutor`
508 has failed initializing.
509
510 .. versionadded:: 3.7
511
Georg Brandlce64ced2014-10-28 22:58:24 +0100512.. currentmodule:: concurrent.futures.process
513
Antoine Pitroudd696492011-06-08 17:21:55 +0200514.. exception:: BrokenProcessPool
515
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100516 Derived from :exc:`~concurrent.futures.BrokenExecutor` (formerly
517 :exc:`RuntimeError`), this exception class is raised when one of the
518 workers of a :class:`ProcessPoolExecutor` has terminated in a non-clean
519 fashion (for example, if it was killed from the outside).
Antoine Pitroudd696492011-06-08 17:21:55 +0200520
521 .. versionadded:: 3.3