blob: 61d6c1143cfdd53ef307c97c22e496e68f869fe8 [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
Kyle Stanley339fd462020-02-02 07:49:00 -050070 .. method:: shutdown(wait=True, \*, cancel_futures=False)
Brian Quinlan81c4d362010-09-18 22:35:02 +000071
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
Kyle Stanley339fd462020-02-02 07:49:00 -050085 If *cancel_futures* is ``True``, this method will cancel all pending
86 futures that the executor has not started running. Any futures that
87 are completed or running won't be cancelled, regardless of the value
88 of *cancel_futures*.
89
90 If both *cancel_futures* and *wait* are ``True``, all futures that the
91 executor has started running will be completed prior to this method
92 returning. The remaining futures are cancelled.
93
Georg Brandl035cedb2010-09-19 09:31:09 +000094 You can avoid having to call this method explicitly if you use the
95 :keyword:`with` statement, which will shutdown the :class:`Executor`
96 (waiting as if :meth:`Executor.shutdown` were called with *wait* set to
97 ``True``)::
Brian Quinlan81c4d362010-09-18 22:35:02 +000098
Georg Brandl035cedb2010-09-19 09:31:09 +000099 import shutil
100 with ThreadPoolExecutor(max_workers=4) as e:
101 e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
102 e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
103 e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
Berker Peksag0b0c3b62015-09-15 19:59:03 +0300104 e.submit(shutil.copy, 'src4.txt', 'dest4.txt')
Brian Quinlan81c4d362010-09-18 22:35:02 +0000105
Kyle Stanley339fd462020-02-02 07:49:00 -0500106 .. versionchanged:: 3.9
107 Added *cancel_futures*.
108
Brian Quinlan81c4d362010-09-18 22:35:02 +0000109
110ThreadPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +0000111------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000112
Martin Panter7462b6492015-11-02 03:37:02 +0000113:class:`ThreadPoolExecutor` is an :class:`Executor` subclass that uses a pool of
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000114threads to execute calls asynchronously.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000115
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000116Deadlocks can occur when the callable associated with a :class:`Future` waits on
Georg Brandl035cedb2010-09-19 09:31:09 +0000117the results of another :class:`Future`. For example::
Brian Quinlan81c4d362010-09-18 22:35:02 +0000118
Georg Brandl035cedb2010-09-19 09:31:09 +0000119 import time
120 def wait_on_b():
121 time.sleep(5)
Serhiy Storchakadba90392016-05-10 12:01:23 +0300122 print(b.result()) # b will never complete because it is waiting on a.
Georg Brandl035cedb2010-09-19 09:31:09 +0000123 return 5
Brian Quinlan81c4d362010-09-18 22:35:02 +0000124
Georg Brandl035cedb2010-09-19 09:31:09 +0000125 def wait_on_a():
126 time.sleep(5)
Serhiy Storchakadba90392016-05-10 12:01:23 +0300127 print(a.result()) # a will never complete because it is waiting on b.
Georg Brandl035cedb2010-09-19 09:31:09 +0000128 return 6
Brian Quinlan81c4d362010-09-18 22:35:02 +0000129
130
Georg Brandl035cedb2010-09-19 09:31:09 +0000131 executor = ThreadPoolExecutor(max_workers=2)
132 a = executor.submit(wait_on_b)
133 b = executor.submit(wait_on_a)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000134
Georg Brandl035cedb2010-09-19 09:31:09 +0000135And::
Brian Quinlan81c4d362010-09-18 22:35:02 +0000136
Georg Brandl035cedb2010-09-19 09:31:09 +0000137 def wait_on_future():
138 f = executor.submit(pow, 5, 2)
139 # This will never complete because there is only one worker thread and
140 # it is executing this function.
141 print(f.result())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000142
Georg Brandl035cedb2010-09-19 09:31:09 +0000143 executor = ThreadPoolExecutor(max_workers=1)
144 executor.submit(wait_on_future)
Brian Quinlan81c4d362010-09-18 22:35:02 +0000145
146
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100147.. class:: ThreadPoolExecutor(max_workers=None, thread_name_prefix='', initializer=None, initargs=())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000148
149 An :class:`Executor` subclass that uses a pool of at most *max_workers*
150 threads to execute calls asynchronously.
151
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100152 *initializer* is an optional callable that is called at the start of
153 each worker thread; *initargs* is a tuple of arguments passed to the
154 initializer. Should *initializer* raise an exception, all currently
155 pending jobs will raise a :exc:`~concurrent.futures.thread.BrokenThreadPool`,
Matt Wheeler40a61da2018-12-05 21:41:20 +0000156 as well as any attempt to submit more jobs to the pool.
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100157
Guido van Rossumcfd46612014-09-02 10:39:18 -0700158 .. versionchanged:: 3.5
159 If *max_workers* is ``None`` or
160 not given, it will default to the number of processors on the machine,
161 multiplied by ``5``, assuming that :class:`ThreadPoolExecutor` is often
162 used to overlap I/O instead of CPU work and the number of workers
163 should be higher than the number of workers
164 for :class:`ProcessPoolExecutor`.
165
Gregory P. Smith50abe872016-08-07 10:19:20 -0700166 .. versionadded:: 3.6
167 The *thread_name_prefix* argument was added to allow users to
Matt Wheeler40a61da2018-12-05 21:41:20 +0000168 control the :class:`threading.Thread` names for worker threads created by
Gregory P. Smith50abe872016-08-07 10:19:20 -0700169 the pool for easier debugging.
Georg Brandl035cedb2010-09-19 09:31:09 +0000170
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100171 .. versionchanged:: 3.7
172 Added the *initializer* and *initargs* arguments.
173
Inada Naoki9a7e5b12019-05-28 21:02:52 +0900174 .. versionchanged:: 3.8
175 Default value of *max_workers* is changed to ``min(32, os.cpu_count() + 4)``.
176 This default value preserves at least 5 workers for I/O bound tasks.
177 It utilizes at most 32 CPU cores for CPU bound tasks which release the GIL.
178 And it avoids using very large resources implicitly on many-core machines.
179
180 ThreadPoolExecutor now reuses idle worker threads before starting
181 *max_workers* worker threads too.
182
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100183
Brian Quinlan81c4d362010-09-18 22:35:02 +0000184.. _threadpoolexecutor-example:
185
186ThreadPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000187~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000188::
189
Georg Brandl035cedb2010-09-19 09:31:09 +0000190 import concurrent.futures
191 import urllib.request
Brian Quinlan81c4d362010-09-18 22:35:02 +0000192
Georg Brandl035cedb2010-09-19 09:31:09 +0000193 URLS = ['http://www.foxnews.com/',
194 'http://www.cnn.com/',
195 'http://europe.wsj.com/',
196 'http://www.bbc.co.uk/',
197 'http://some-made-up-domain.com/']
Brian Quinlan81c4d362010-09-18 22:35:02 +0000198
Martin Panterfe289c02016-05-28 02:20:39 +0000199 # Retrieve a single page and report the URL and contents
Georg Brandl035cedb2010-09-19 09:31:09 +0000200 def load_url(url, timeout):
Berker Peksag9575e182015-04-12 13:52:49 +0300201 with urllib.request.urlopen(url, timeout=timeout) as conn:
202 return conn.read()
Brian Quinlan81c4d362010-09-18 22:35:02 +0000203
Nick Coghlanf06ea252012-10-16 22:50:04 +1000204 # We can use a with statement to ensure threads are cleaned up promptly
Georg Brandl035cedb2010-09-19 09:31:09 +0000205 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000206 # Start the load operations and mark each future with its URL
Georg Brandl0a1bc112013-03-23 15:59:46 +0100207 future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
Nick Coghland6d5cf32012-10-16 23:14:03 +1000208 for future in concurrent.futures.as_completed(future_to_url):
Nick Coghlan40c67732012-10-20 20:13:21 +1000209 url = future_to_url[future]
Nick Coghlanf06ea252012-10-16 22:50:04 +1000210 try:
211 data = future.result()
212 except Exception as exc:
213 print('%r generated an exception: %s' % (url, exc))
Georg Brandl035cedb2010-09-19 09:31:09 +0000214 else:
Nick Coghlanf06ea252012-10-16 22:50:04 +1000215 print('%r page is %d bytes' % (url, len(data)))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000216
217
218ProcessPoolExecutor
Georg Brandl035cedb2010-09-19 09:31:09 +0000219-------------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000220
221The :class:`ProcessPoolExecutor` class is an :class:`Executor` subclass that
222uses a pool of processes to execute calls asynchronously.
223:class:`ProcessPoolExecutor` uses the :mod:`multiprocessing` module, which
Victor Stinner8f881902020-08-19 19:25:22 +0200224allows it to side-step the :term:`Global Interpreter Lock
225<global interpreter lock>` but also means that
Brian Quinlan81c4d362010-09-18 22:35:02 +0000226only picklable objects can be executed and returned.
227
bquinlan7749cb52013-10-26 04:49:55 +1100228The ``__main__`` module must be importable by worker subprocesses. This means
229that :class:`ProcessPoolExecutor` will not work in the interactive interpreter.
230
Brian Quinlan81c4d362010-09-18 22:35:02 +0000231Calling :class:`Executor` or :class:`Future` methods from a callable submitted
232to a :class:`ProcessPoolExecutor` will result in deadlock.
233
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100234.. class:: ProcessPoolExecutor(max_workers=None, mp_context=None, initializer=None, initargs=())
Brian Quinlan81c4d362010-09-18 22:35:02 +0000235
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000236 An :class:`Executor` subclass that executes calls asynchronously using a pool
Georg Brandl035cedb2010-09-19 09:31:09 +0000237 of at most *max_workers* processes. If *max_workers* is ``None`` or not
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000238 given, it will default to the number of processors on the machine.
Miss Islington (bot)2e5bd4f2020-11-08 01:45:45 -0800239 If *max_workers* is less than or equal to ``0``, then a :exc:`ValueError`
Brian Quinlan20efceb2014-05-17 13:51:10 -0700240 will be raised.
Miss Islington (bot)2e5bd4f2020-11-08 01:45:45 -0800241 On Windows, *max_workers* must be less than or equal to ``61``. If it is not
Brian Quinlan39889862019-05-08 14:04:53 -0400242 then :exc:`ValueError` will be raised. If *max_workers* is ``None``, then
243 the default chosen will be at most ``61``, even if more processors are
244 available.
Thomas Moreaue8c368d2017-10-03 11:53:17 +0200245 *mp_context* can be a multiprocessing context or None. It will be used to
246 launch the workers. If *mp_context* is ``None`` or not given, the default
247 multiprocessing context is used.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000248
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100249 *initializer* is an optional callable that is called at the start of
250 each worker process; *initargs* is a tuple of arguments passed to the
251 initializer. Should *initializer* raise an exception, all currently
Joni Kähäräb60b4682018-09-25 06:30:25 +0300252 pending jobs will raise a :exc:`~concurrent.futures.process.BrokenProcessPool`,
Miss Islington (bot)2e5bd4f2020-11-08 01:45:45 -0800253 as well as any attempt to submit more jobs to the pool.
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100254
Antoine Pitroudd696492011-06-08 17:21:55 +0200255 .. versionchanged:: 3.3
256 When one of the worker processes terminates abruptly, a
257 :exc:`BrokenProcessPool` error is now raised. Previously, behaviour
258 was undefined but operations on the executor or its futures would often
259 freeze or deadlock.
260
Thomas Moreaue8c368d2017-10-03 11:53:17 +0200261 .. versionchanged:: 3.7
262 The *mp_context* argument was added to allow users to control the
263 start_method for worker processes created by the pool.
264
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100265 Added the *initializer* and *initargs* arguments.
266
Georg Brandl035cedb2010-09-19 09:31:09 +0000267
Brian Quinlan81c4d362010-09-18 22:35:02 +0000268.. _processpoolexecutor-example:
269
270ProcessPoolExecutor Example
Georg Brandl035cedb2010-09-19 09:31:09 +0000271~~~~~~~~~~~~~~~~~~~~~~~~~~~
Brian Quinlan81c4d362010-09-18 22:35:02 +0000272::
273
Georg Brandl035cedb2010-09-19 09:31:09 +0000274 import concurrent.futures
275 import math
Brian Quinlan81c4d362010-09-18 22:35:02 +0000276
Georg Brandl035cedb2010-09-19 09:31:09 +0000277 PRIMES = [
278 112272535095293,
279 112582705942171,
280 112272535095293,
281 115280095190773,
282 115797848077099,
283 1099726899285419]
Brian Quinlan81c4d362010-09-18 22:35:02 +0000284
Georg Brandl035cedb2010-09-19 09:31:09 +0000285 def is_prime(n):
Julien Palard8e73ad32018-10-17 08:45:51 +0200286 if n < 2:
287 return False
288 if n == 2:
289 return True
Georg Brandl035cedb2010-09-19 09:31:09 +0000290 if n % 2 == 0:
291 return False
Brian Quinlan81c4d362010-09-18 22:35:02 +0000292
Georg Brandl035cedb2010-09-19 09:31:09 +0000293 sqrt_n = int(math.floor(math.sqrt(n)))
294 for i in range(3, sqrt_n + 1, 2):
295 if n % i == 0:
296 return False
297 return True
Brian Quinlan81c4d362010-09-18 22:35:02 +0000298
Georg Brandl035cedb2010-09-19 09:31:09 +0000299 def main():
300 with concurrent.futures.ProcessPoolExecutor() as executor:
301 for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
302 print('%d is prime: %s' % (number, prime))
Brian Quinlan81c4d362010-09-18 22:35:02 +0000303
Georg Brandl035cedb2010-09-19 09:31:09 +0000304 if __name__ == '__main__':
305 main()
306
Brian Quinlan81c4d362010-09-18 22:35:02 +0000307
308Future Objects
Georg Brandl035cedb2010-09-19 09:31:09 +0000309--------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000310
Georg Brandl6faee4e2010-09-21 14:48:28 +0000311The :class:`Future` class encapsulates the asynchronous execution of a callable.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000312:class:`Future` instances are created by :meth:`Executor.submit`.
313
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000314.. class:: Future
Brian Quinlan81c4d362010-09-18 22:35:02 +0000315
Georg Brandl6faee4e2010-09-21 14:48:28 +0000316 Encapsulates the asynchronous execution of a callable. :class:`Future`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000317 instances are created by :meth:`Executor.submit` and should not be created
318 directly except for testing.
319
320 .. method:: cancel()
321
Géry Ogam431478d2019-06-14 16:39:43 +0200322 Attempt to cancel the call. If the call is currently being executed or
323 finished running and cannot be cancelled then the method will return
324 ``False``, otherwise the call will be cancelled and the method will
325 return ``True``.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000326
327 .. method:: cancelled()
328
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000329 Return ``True`` if the call was successfully cancelled.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000330
331 .. method:: running()
332
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000333 Return ``True`` if the call is currently being executed and cannot be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000334 cancelled.
335
336 .. method:: done()
337
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000338 Return ``True`` if the call was successfully cancelled or finished
339 running.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000340
341 .. method:: result(timeout=None)
342
343 Return the value returned by the call. If the call hasn't yet completed
Georg Brandl035cedb2010-09-19 09:31:09 +0000344 then this method will wait up to *timeout* seconds. If the call hasn't
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800345 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 raised, this method will raise the same exception.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000354
355 .. method:: exception(timeout=None)
356
Georg Brandl035cedb2010-09-19 09:31:09 +0000357 Return the exception raised by the call. If the call hasn't yet
358 completed then this method will wait up to *timeout* seconds. If the
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800359 call hasn't completed in *timeout* seconds, then a
360 :exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
361 an int or float. If *timeout* is not specified or ``None``, there is no
362 limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000363
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800364 If the future is cancelled before completing then :exc:`.CancelledError`
Brian Quinlan81c4d362010-09-18 22:35:02 +0000365 will be raised.
366
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000367 If the call completed without raising, ``None`` is returned.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000368
369 .. method:: add_done_callback(fn)
370
Georg Brandl035cedb2010-09-19 09:31:09 +0000371 Attaches the callable *fn* to the future. *fn* will be called, with the
Brian Quinlan81c4d362010-09-18 22:35:02 +0000372 future as its only argument, when the future is cancelled or finishes
373 running.
374
375 Added callables are called in the order that they were added and are
Georg Brandl035cedb2010-09-19 09:31:09 +0000376 always called in a thread belonging to the process that added them. If
Martin Panter7462b6492015-11-02 03:37:02 +0000377 the callable raises an :exc:`Exception` subclass, it will be logged and
Georg Brandl035cedb2010-09-19 09:31:09 +0000378 ignored. If the callable raises a :exc:`BaseException` subclass, the
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000379 behavior is undefined.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000380
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000381 If the future has already completed or been cancelled, *fn* will be
Brian Quinlan81c4d362010-09-18 22:35:02 +0000382 called immediately.
383
384 The following :class:`Future` methods are meant for use in unit tests and
385 :class:`Executor` implementations.
386
387 .. method:: set_running_or_notify_cancel()
388
389 This method should only be called by :class:`Executor` implementations
Georg Brandl035cedb2010-09-19 09:31:09 +0000390 before executing the work associated with the :class:`Future` and by unit
391 tests.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000392
Senthil Kumaran916bd382010-10-15 12:55:19 +0000393 If the method returns ``False`` then the :class:`Future` was cancelled,
Georg Brandl035cedb2010-09-19 09:31:09 +0000394 i.e. :meth:`Future.cancel` was called and returned `True`. Any threads
395 waiting on the :class:`Future` completing (i.e. through
396 :func:`as_completed` or :func:`wait`) will be woken up.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000397
Senthil Kumaran916bd382010-10-15 12:55:19 +0000398 If the method returns ``True`` then the :class:`Future` was not cancelled
Georg Brandl035cedb2010-09-19 09:31:09 +0000399 and has been put in the running state, i.e. calls to
Brian Quinlan81c4d362010-09-18 22:35:02 +0000400 :meth:`Future.running` will return `True`.
401
402 This method can only be called once and cannot be called after
403 :meth:`Future.set_result` or :meth:`Future.set_exception` have been
404 called.
405
406 .. method:: set_result(result)
407
408 Sets the result of the work associated with the :class:`Future` to
409 *result*.
410
411 This method should only be used by :class:`Executor` implementations and
412 unit tests.
413
jhaydaman0a28c0d2018-05-30 02:15:06 -0500414 .. versionchanged:: 3.8
415 This method raises
416 :exc:`concurrent.futures.InvalidStateError` if the :class:`Future` is
417 already done.
418
Brian Quinlan81c4d362010-09-18 22:35:02 +0000419 .. method:: set_exception(exception)
420
421 Sets the result of the work associated with the :class:`Future` to the
422 :class:`Exception` *exception*.
423
424 This method should only be used by :class:`Executor` implementations and
425 unit tests.
426
jhaydaman0a28c0d2018-05-30 02:15:06 -0500427 .. versionchanged:: 3.8
428 This method raises
429 :exc:`concurrent.futures.InvalidStateError` if the :class:`Future` is
430 already done.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000431
432Module Functions
Georg Brandl035cedb2010-09-19 09:31:09 +0000433----------------
Brian Quinlan81c4d362010-09-18 22:35:02 +0000434
435.. function:: wait(fs, timeout=None, return_when=ALL_COMPLETED)
436
437 Wait for the :class:`Future` instances (possibly created by different
Georg Brandl035cedb2010-09-19 09:31:09 +0000438 :class:`Executor` instances) given by *fs* to complete. Returns a named
439 2-tuple of sets. The first set, named ``done``, contains the futures that
Géry Ogam431478d2019-06-14 16:39:43 +0200440 completed (finished or cancelled futures) before the wait completed. The
441 second set, named ``not_done``, contains the futures that did not complete
442 (pending or running futures).
Brian Quinlan81c4d362010-09-18 22:35:02 +0000443
444 *timeout* can be used to control the maximum number of seconds to wait before
Georg Brandl035cedb2010-09-19 09:31:09 +0000445 returning. *timeout* can be an int or float. If *timeout* is not specified
446 or ``None``, there is no limit to the wait time.
Brian Quinlan81c4d362010-09-18 22:35:02 +0000447
Georg Brandl035cedb2010-09-19 09:31:09 +0000448 *return_when* indicates when this function should return. It must be one of
Brian Quinlan81c4d362010-09-18 22:35:02 +0000449 the following constants:
450
Georg Brandl44ea77b2013-03-28 13:28:44 +0100451 .. tabularcolumns:: |l|L|
452
Georg Brandl035cedb2010-09-19 09:31:09 +0000453 +-----------------------------+----------------------------------------+
454 | Constant | Description |
455 +=============================+========================================+
456 | :const:`FIRST_COMPLETED` | The function will return when any |
457 | | future finishes or is cancelled. |
458 +-----------------------------+----------------------------------------+
459 | :const:`FIRST_EXCEPTION` | The function will return when any |
460 | | future finishes by raising an |
461 | | exception. If no future raises an |
462 | | exception then it is equivalent to |
463 | | :const:`ALL_COMPLETED`. |
464 +-----------------------------+----------------------------------------+
465 | :const:`ALL_COMPLETED` | The function will return when all |
466 | | futures finish or are cancelled. |
467 +-----------------------------+----------------------------------------+
Brian Quinlan81c4d362010-09-18 22:35:02 +0000468
469.. function:: as_completed(fs, timeout=None)
470
Benjamin Petersonc713fc72010-09-19 04:23:17 +0000471 Returns an iterator over the :class:`Future` instances (possibly created by
472 different :class:`Executor` instances) given by *fs* that yields futures as
Géry Ogam431478d2019-06-14 16:39:43 +0200473 they complete (finished or cancelled futures). Any futures given by *fs* that
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800474 are duplicated will be returned once. Any futures that completed before
475 :func:`as_completed` is called will be yielded first. The returned iterator
476 raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
477 is called and the result isn't available after *timeout* seconds from the
478 original call to :func:`as_completed`. *timeout* can be an int or float. If
479 *timeout* is not specified or ``None``, there is no limit to the wait time.
Georg Brandl035cedb2010-09-19 09:31:09 +0000480
481
482.. seealso::
483
484 :pep:`3148` -- futures - execute computations asynchronously
485 The proposal which described this feature for inclusion in the Python
486 standard library.
Antoine Pitroudd696492011-06-08 17:21:55 +0200487
488
489Exception classes
490-----------------
491
Senthil Kumaran9e9f8502016-01-18 18:45:00 -0800492.. currentmodule:: concurrent.futures
493
494.. exception:: CancelledError
495
496 Raised when a future is cancelled.
497
498.. exception:: TimeoutError
499
500 Raised when a future operation exceeds the given timeout.
501
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100502.. exception:: BrokenExecutor
503
504 Derived from :exc:`RuntimeError`, this exception class is raised
505 when an executor is broken for some reason, and cannot be used
506 to submit or execute new tasks.
507
508 .. versionadded:: 3.7
509
jhaydaman0a28c0d2018-05-30 02:15:06 -0500510.. exception:: InvalidStateError
511
512 Raised when an operation is performed on a future that is not allowed
513 in the current state.
514
515 .. versionadded:: 3.8
516
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100517.. currentmodule:: concurrent.futures.thread
518
519.. exception:: BrokenThreadPool
520
521 Derived from :exc:`~concurrent.futures.BrokenExecutor`, this exception
522 class is raised when one of the workers of a :class:`ThreadPoolExecutor`
523 has failed initializing.
524
525 .. versionadded:: 3.7
526
Georg Brandlce64ced2014-10-28 22:58:24 +0100527.. currentmodule:: concurrent.futures.process
528
Antoine Pitroudd696492011-06-08 17:21:55 +0200529.. exception:: BrokenProcessPool
530
Antoine Pitrou63ff4132017-11-04 11:05:49 +0100531 Derived from :exc:`~concurrent.futures.BrokenExecutor` (formerly
532 :exc:`RuntimeError`), this exception class is raised when one of the
533 workers of a :class:`ProcessPoolExecutor` has terminated in a non-clean
534 fashion (for example, if it was killed from the outside).
Antoine Pitroudd696492011-06-08 17:21:55 +0200535
536 .. versionadded:: 3.3