blob: dc450c375aade4a9374b1cce08bdad4bdf1adaf9 [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
3Tasks and coroutines
4====================
5
lf627d2c82017-07-25 17:03:51 -06006**Source code:** :source:`Lib/asyncio/tasks.py`
7
8**Source code:** :source:`Lib/asyncio/coroutines.py`
9
Victor Stinnerea3183f2013-12-03 01:08:00 +010010.. _coroutine:
11
12Coroutines
13----------
14
Yury Selivanov66f88282015-06-24 11:04:15 -040015Coroutines used with :mod:`asyncio` may be implemented using the
16:keyword:`async def` statement, or by using :term:`generators <generator>`.
17The :keyword:`async def` type of coroutine was added in Python 3.5, and
18is recommended if there is no need to support older Python versions.
Victor Stinnerea3183f2013-12-03 01:08:00 +010019
Yury Selivanov66f88282015-06-24 11:04:15 -040020Generator-based coroutines should be decorated with :func:`@asyncio.coroutine
21<asyncio.coroutine>`, although this is not strictly enforced.
22The decorator enables compatibility with :keyword:`async def` coroutines,
23and also serves as documentation. Generator-based
24coroutines use the ``yield from`` syntax introduced in :pep:`380`,
Victor Stinnerea3183f2013-12-03 01:08:00 +010025instead of the original ``yield`` syntax.
26
27The word "coroutine", like the word "generator", is used for two
28different (though related) concepts:
29
Yury Selivanov66f88282015-06-24 11:04:15 -040030- The function that defines a coroutine
31 (a function definition using :keyword:`async def` or
Victor Stinner59759ff2014-01-16 19:30:21 +010032 decorated with ``@asyncio.coroutine``). If disambiguation is needed
Victor Stinner1ad5afc2014-01-30 00:18:50 +010033 we will call this a *coroutine function* (:func:`iscoroutinefunction`
34 returns ``True``).
Victor Stinnerea3183f2013-12-03 01:08:00 +010035
36- The object obtained by calling a coroutine function. This object
37 represents a computation or an I/O operation (usually a combination)
38 that will complete eventually. If disambiguation is needed we will
Victor Stinner1ad5afc2014-01-30 00:18:50 +010039 call it a *coroutine object* (:func:`iscoroutine` returns ``True``).
Victor Stinnerea3183f2013-12-03 01:08:00 +010040
41Things a coroutine can do:
42
Yury Selivanov66f88282015-06-24 11:04:15 -040043- ``result = await future`` or ``result = yield from future`` --
44 suspends the coroutine until the
Victor Stinnerea3183f2013-12-03 01:08:00 +010045 future is done, then returns the future's result, or raises an
46 exception, which will be propagated. (If the future is cancelled,
47 it will raise a ``CancelledError`` exception.) Note that tasks are
48 futures, and everything said about futures also applies to tasks.
49
Yury Selivanov66f88282015-06-24 11:04:15 -040050- ``result = await coroutine`` or ``result = yield from coroutine`` --
51 wait for another coroutine to
Victor Stinnerea3183f2013-12-03 01:08:00 +010052 produce a result (or raise an exception, which will be propagated).
53 The ``coroutine`` expression must be a *call* to another coroutine.
54
55- ``return expression`` -- produce a result to the coroutine that is
Yury Selivanov66f88282015-06-24 11:04:15 -040056 waiting for this one using :keyword:`await` or ``yield from``.
Victor Stinnerea3183f2013-12-03 01:08:00 +010057
58- ``raise exception`` -- raise an exception in the coroutine that is
Yury Selivanov66f88282015-06-24 11:04:15 -040059 waiting for this one using :keyword:`await` or ``yield from``.
Victor Stinnerea3183f2013-12-03 01:08:00 +010060
Yury Selivanov66f88282015-06-24 11:04:15 -040061Calling a coroutine does not start its code running --
62the coroutine object returned by the call doesn't do anything until you
63schedule its execution. There are two basic ways to start it running:
64call ``await coroutine`` or ``yield from coroutine`` from another coroutine
Victor Stinner530ef2f2014-07-08 12:39:10 +020065(assuming the other coroutine is already running!), or schedule its execution
Guido van Rossumf68afd82016-08-08 09:41:21 -070066using the :func:`ensure_future` function or the :meth:`AbstractEventLoop.create_task`
Victor Stinner337e03f2014-08-11 01:11:13 +020067method.
68
Victor Stinnerea3183f2013-12-03 01:08:00 +010069
70Coroutines (and tasks) can only run when the event loop is running.
71
Victor Stinnerdb39a0d2014-01-16 18:58:01 +010072.. decorator:: coroutine
73
Yury Selivanov66f88282015-06-24 11:04:15 -040074 Decorator to mark generator-based coroutines. This enables
75 the generator use :keyword:`!yield from` to call :keyword:`async
76 def` coroutines, and also enables the generator to be called by
77 :keyword:`async def` coroutines, for instance using an
78 :keyword:`await` expression.
Victor Stinnerdb39a0d2014-01-16 18:58:01 +010079
Yury Selivanov66f88282015-06-24 11:04:15 -040080 There is no need to decorate :keyword:`async def` coroutines themselves.
81
82 If the generator is not yielded from before it is destroyed, an error
Victor Stinnerdb39a0d2014-01-16 18:58:01 +010083 message is logged. See :ref:`Detect coroutines never scheduled
84 <asyncio-coroutine-not-scheduled>`.
85
Yury Selivanov37f15bc2014-02-20 16:20:44 -050086.. note::
87
88 In this documentation, some methods are documented as coroutines,
89 even if they are plain Python functions returning a :class:`Future`.
90 This is intentional to have a freedom of tweaking the implementation
91 of these functions in the future. If such a function is needed to be
Yury Selivanov04356e12015-06-30 22:13:22 -040092 used in a callback-style code, wrap its result with :func:`ensure_future`.
Yury Selivanov37f15bc2014-02-20 16:20:44 -050093
Victor Stinnerea3183f2013-12-03 01:08:00 +010094
Elvis Pranskevichus15f3d0c2018-05-19 23:39:45 -040095.. function:: run(coro, \*, debug=False)
Yury Selivanov02a0a192017-12-14 09:42:21 -050096
97 This function runs the passed coroutine, taking care of
98 managing the asyncio event loop and finalizing asynchronous
99 generators.
100
101 This function cannot be called when another asyncio event loop is
102 running in the same thread.
103
104 If debug is True, the event loop will be run in debug mode.
105
106 This function always creates a new event loop and closes it at
107 the end. It should be used as a main entry point for asyncio
108 programs, and should ideally only be called once.
109
110 .. versionadded:: 3.7
Miss Islington (bot)f34ade32018-05-17 12:10:56 -0700111 **Important:** this has been been added to asyncio in Python 3.7
112 on a :term:`provisional basis <provisional api>`.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500113
114
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100115.. _asyncio-hello-world-coroutine:
116
Victor Stinner7f314ed2014-10-15 18:49:16 +0200117Example: Hello World coroutine
118^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100119
Victor Stinner7f314ed2014-10-15 18:49:16 +0200120Example of coroutine displaying ``"Hello World"``::
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100121
122 import asyncio
123
Yury Selivanov66f88282015-06-24 11:04:15 -0400124 async def hello_world():
Victor Stinner7f314ed2014-10-15 18:49:16 +0200125 print("Hello World!")
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100126
Yury Selivanov02a0a192017-12-14 09:42:21 -0500127 asyncio.run(hello_world())
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100128
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100129.. seealso::
130
Victor Stinner7f314ed2014-10-15 18:49:16 +0200131 The :ref:`Hello World with call_soon() <asyncio-hello-world-callback>`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700132 example uses the :meth:`AbstractEventLoop.call_soon` method to schedule a
Victor Stinner7f314ed2014-10-15 18:49:16 +0200133 callback.
134
135
136.. _asyncio-date-coroutine:
137
138Example: Coroutine displaying the current date
139^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
140
141Example of coroutine displaying the current date every second during 5 seconds
142using the :meth:`sleep` function::
143
144 import asyncio
145 import datetime
146
Yury Selivanov02a0a192017-12-14 09:42:21 -0500147 async def display_date():
148 loop = asyncio.get_running_loop()
Yury Selivanov66f88282015-06-24 11:04:15 -0400149 end_time = loop.time() + 5.0
150 while True:
151 print(datetime.datetime.now())
152 if (loop.time() + 1.0) >= end_time:
153 break
154 await asyncio.sleep(1)
155
Yury Selivanov02a0a192017-12-14 09:42:21 -0500156 asyncio.run(display_date())
Yury Selivanov66f88282015-06-24 11:04:15 -0400157
Victor Stinner7f314ed2014-10-15 18:49:16 +0200158.. seealso::
159
160 The :ref:`display the current date with call_later()
161 <asyncio-date-callback>` example uses a callback with the
Guido van Rossumf68afd82016-08-08 09:41:21 -0700162 :meth:`AbstractEventLoop.call_later` method.
Victor Stinner7f314ed2014-10-15 18:49:16 +0200163
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100164
165Example: Chain coroutines
166^^^^^^^^^^^^^^^^^^^^^^^^^
167
168Example chaining coroutines::
169
170 import asyncio
171
Yury Selivanov66f88282015-06-24 11:04:15 -0400172 async def compute(x, y):
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100173 print("Compute %s + %s ..." % (x, y))
Yury Selivanov66f88282015-06-24 11:04:15 -0400174 await asyncio.sleep(1.0)
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100175 return x + y
176
Yury Selivanov66f88282015-06-24 11:04:15 -0400177 async def print_sum(x, y):
178 result = await compute(x, y)
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100179 print("%s + %s = %s" % (x, y, result))
180
181 loop = asyncio.get_event_loop()
182 loop.run_until_complete(print_sum(1, 2))
Victor Stinnerf40c6632014-01-28 23:32:40 +0100183 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100184
185``compute()`` is chained to ``print_sum()``: ``print_sum()`` coroutine waits
Brian Curtina1afeec2014-02-08 18:36:14 -0600186until ``compute()`` is completed before returning its result.
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100187
Victor Stinner1c4b8922013-12-12 12:35:17 +0100188Sequence diagram of the example:
189
190.. image:: tulip_coro.png
191 :align: center
192
Guido van Rossumf68afd82016-08-08 09:41:21 -0700193The "Task" is created by the :meth:`AbstractEventLoop.run_until_complete` method
Victor Stinner59759ff2014-01-16 19:30:21 +0100194when it gets a coroutine object instead of a task.
Victor Stinner86e139a2013-12-13 12:51:24 +0100195
196The diagram shows the control flow, it does not describe exactly how things
197work internally. For example, the sleep coroutine creates an internal future
Guido van Rossumf68afd82016-08-08 09:41:21 -0700198which uses :meth:`AbstractEventLoop.call_later` to wake up the task in 1 second.
Victor Stinner1c4b8922013-12-12 12:35:17 +0100199
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100200
Victor Stinner99c2ab42013-12-03 19:17:25 +0100201InvalidStateError
202-----------------
203
204.. exception:: InvalidStateError
205
206 The operation is not allowed in this state.
207
208
Victor Stinner28d0ae482014-05-29 00:04:57 +0200209TimeoutError
210------------
211
212.. exception:: TimeoutError
213
214 The operation exceeded the given deadline.
215
216.. note::
217
218 This exception is different from the builtin :exc:`TimeoutError` exception!
219
220
Victor Stinner99c2ab42013-12-03 19:17:25 +0100221Future
222------
223
224.. class:: Future(\*, loop=None)
225
226 This class is *almost* compatible with :class:`concurrent.futures.Future`.
227
228 Differences:
229
230 - :meth:`result` and :meth:`exception` do not take a timeout argument and
231 raise an exception when the future isn't done yet.
232
233 - Callbacks registered with :meth:`add_done_callback` are always called
Antoine Pitrou22b11282017-11-07 17:03:28 +0100234 via the event loop's :meth:`~AbstractEventLoop.call_soon`.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100235
236 - This class is not compatible with the :func:`~concurrent.futures.wait` and
237 :func:`~concurrent.futures.as_completed` functions in the
238 :mod:`concurrent.futures` package.
239
Victor Stinner83704962015-02-25 14:24:15 +0100240 This class is :ref:`not thread safe <asyncio-multithreading>`.
241
Victor Stinner99c2ab42013-12-03 19:17:25 +0100242 .. method:: cancel()
243
244 Cancel the future and schedule callbacks.
245
246 If the future is already done or cancelled, return ``False``. Otherwise,
247 change the future's state to cancelled, schedule the callbacks and return
248 ``True``.
249
250 .. method:: cancelled()
251
252 Return ``True`` if the future was cancelled.
253
254 .. method:: done()
255
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300256 Return ``True`` if the future is done.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100257
258 Done means either that a result / exception are available, or that the
259 future was cancelled.
260
261 .. method:: result()
262
263 Return the result this future represents.
264
265 If the future has been cancelled, raises :exc:`CancelledError`. If the
266 future's result isn't yet available, raises :exc:`InvalidStateError`. If
267 the future is done and has an exception set, this exception is raised.
268
269 .. method:: exception()
270
271 Return the exception that was set on this future.
272
273 The exception (or ``None`` if no exception was set) is returned only if
274 the future is done. If the future has been cancelled, raises
275 :exc:`CancelledError`. If the future isn't done yet, raises
276 :exc:`InvalidStateError`.
277
Miss Islington (bot)2fc443c2018-05-23 10:59:17 -0700278 .. method:: add_done_callback(callback, *, context=None)
Victor Stinner99c2ab42013-12-03 19:17:25 +0100279
280 Add a callback to be run when the future becomes done.
281
Miss Islington (bot)2fc443c2018-05-23 10:59:17 -0700282 The *callback* is called with a single argument - the future object. If the
Victor Stinner99c2ab42013-12-03 19:17:25 +0100283 future is already done when this is called, the callback is scheduled
Guido van Rossumf68afd82016-08-08 09:41:21 -0700284 with :meth:`~AbstractEventLoop.call_soon`.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100285
Miss Islington (bot)2fc443c2018-05-23 10:59:17 -0700286 An optional keyword-only *context* argument allows specifying a custom
287 :class:`contextvars.Context` for the *callback* to run in. The current
288 context is used when no *context* is provided.
289
Victor Stinner8464c242014-11-28 13:15:41 +0100290 :ref:`Use functools.partial to pass parameters to the callback
291 <asyncio-pass-keywords>`. For example,
292 ``fut.add_done_callback(functools.partial(print, "Future:",
293 flush=True))`` will call ``print("Future:", fut, flush=True)``.
294
Miss Islington (bot)2fc443c2018-05-23 10:59:17 -0700295 .. versionchanged:: 3.7
296 The *context* keyword-only parameter was added. See :pep:`567`
297 for more details.
298
Victor Stinner99c2ab42013-12-03 19:17:25 +0100299 .. method:: remove_done_callback(fn)
300
301 Remove all instances of a callback from the "call when done" list.
302
303 Returns the number of callbacks removed.
304
305 .. method:: set_result(result)
306
307 Mark the future done and set its result.
308
309 If the future is already done when this method is called, raises
310 :exc:`InvalidStateError`.
311
312 .. method:: set_exception(exception)
313
314 Mark the future done and set an exception.
315
316 If the future is already done when this method is called, raises
317 :exc:`InvalidStateError`.
318
Yury Selivanovca9b36c2017-12-23 15:04:15 -0500319 .. method:: get_loop()
320
321 Return the event loop the future object is bound to.
322
323 .. versionadded:: 3.7
324
Victor Stinner99c2ab42013-12-03 19:17:25 +0100325
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100326Example: Future with run_until_complete()
327^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
328
Victor Stinner59759ff2014-01-16 19:30:21 +0100329Example combining a :class:`Future` and a :ref:`coroutine function
330<coroutine>`::
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100331
332 import asyncio
333
Berker Peksagf5928672017-02-07 11:27:09 +0300334 async def slow_operation(future):
335 await asyncio.sleep(1)
Victor Stinner04e05da2014-02-17 10:54:30 +0100336 future.set_result('Future is done!')
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100337
338 loop = asyncio.get_event_loop()
339 future = asyncio.Future()
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400340 asyncio.ensure_future(slow_operation(future))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100341 loop.run_until_complete(future)
342 print(future.result())
Victor Stinnerf40c6632014-01-28 23:32:40 +0100343 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100344
Terry Jan Reedyc935a952014-07-24 02:33:14 -0400345The coroutine function is responsible for the computation (which takes 1 second)
Victor Stinner59759ff2014-01-16 19:30:21 +0100346and it stores the result into the future. The
Guido van Rossumf68afd82016-08-08 09:41:21 -0700347:meth:`~AbstractEventLoop.run_until_complete` method waits for the completion of
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100348the future.
349
350.. note::
Guido van Rossumf68afd82016-08-08 09:41:21 -0700351 The :meth:`~AbstractEventLoop.run_until_complete` method uses internally the
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100352 :meth:`~Future.add_done_callback` method to be notified when the future is
353 done.
354
355
356Example: Future with run_forever()
357^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
358
359The previous example can be written differently using the
360:meth:`Future.add_done_callback` method to describe explicitly the control
361flow::
362
363 import asyncio
364
Berker Peksagf5928672017-02-07 11:27:09 +0300365 async def slow_operation(future):
366 await asyncio.sleep(1)
Victor Stinner04e05da2014-02-17 10:54:30 +0100367 future.set_result('Future is done!')
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100368
369 def got_result(future):
370 print(future.result())
371 loop.stop()
372
373 loop = asyncio.get_event_loop()
374 future = asyncio.Future()
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400375 asyncio.ensure_future(slow_operation(future))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100376 future.add_done_callback(got_result)
Victor Stinner04e05da2014-02-17 10:54:30 +0100377 try:
378 loop.run_forever()
379 finally:
380 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100381
Victor Stinner039f7032014-12-02 17:52:45 +0100382In this example, the future is used to link ``slow_operation()`` to
383``got_result()``: when ``slow_operation()`` is done, ``got_result()`` is called
384with the result.
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100385
386
Victor Stinnerea3183f2013-12-03 01:08:00 +0100387Task
388----
389
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200390.. function:: create_task(coro)
391
392 Wrap a :ref:`coroutine <coroutine>` *coro* into a task and schedule
393 its execution. Return the task object.
394
395 The task is executed in :func:`get_running_loop` context,
396 :exc:`RuntimeError` is raised if there is no running loop in
397 current thread.
398
399 .. versionadded:: 3.7
400
Victor Stinnerea3183f2013-12-03 01:08:00 +0100401.. class:: Task(coro, \*, loop=None)
402
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200403 A unit for concurrent running of :ref:`coroutines <coroutine>`,
404 subclass of :class:`Future`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200405
R David Murray22dd8332014-09-24 11:09:09 -0400406 A task is responsible for executing a coroutine object in an event loop. If
Victor Stinner530ef2f2014-07-08 12:39:10 +0200407 the wrapped coroutine yields from a future, the task suspends the execution
Berker Peksag002b0a72016-10-04 20:45:47 +0300408 of the wrapped coroutine and waits for the completion of the future. When
Victor Stinner530ef2f2014-07-08 12:39:10 +0200409 the future is done, the execution of the wrapped coroutine restarts with the
410 result or the exception of the future.
411
412 Event loops use cooperative scheduling: an event loop only runs one task at
R David Murray22dd8332014-09-24 11:09:09 -0400413 a time. Other tasks may run in parallel if other event loops are
Victor Stinner530ef2f2014-07-08 12:39:10 +0200414 running in different threads. While a task waits for the completion of a
415 future, the event loop executes a new task.
416
luzpaza5293b42017-11-05 07:37:50 -0600417 The cancellation of a task is different from the cancellation of a
Andrew Svetlovf1240162016-01-11 14:40:35 +0200418 future. Calling :meth:`cancel` will throw a
419 :exc:`~concurrent.futures.CancelledError` to the wrapped
420 coroutine. :meth:`~Future.cancelled` only returns ``True`` if the
Victor Stinner530ef2f2014-07-08 12:39:10 +0200421 wrapped coroutine did not catch the
422 :exc:`~concurrent.futures.CancelledError` exception, or raised a
423 :exc:`~concurrent.futures.CancelledError` exception.
424
425 If a pending task is destroyed, the execution of its wrapped :ref:`coroutine
426 <coroutine>` did not complete. It is probably a bug and a warning is
427 logged: see :ref:`Pending task destroyed <asyncio-pending-task-destroyed>`.
428
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200429 Don't directly create :class:`Task` instances: use the :func:`create_task`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700430 function or the :meth:`AbstractEventLoop.create_task` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100431
Miss Islington (bot)2fc443c2018-05-23 10:59:17 -0700432 Tasks support the :mod:`contextvars` module. When a Task
433 is created it copies the current context and later runs its coroutine
434 in the copied context. See :pep:`567` for more details.
435
Victor Stinner83704962015-02-25 14:24:15 +0100436 This class is :ref:`not thread safe <asyncio-multithreading>`.
437
Miss Islington (bot)2fc443c2018-05-23 10:59:17 -0700438 .. versionchanged:: 3.7
439 Added support for the :mod:`contextvars` module.
440
Victor Stinnerea3183f2013-12-03 01:08:00 +0100441 .. classmethod:: all_tasks(loop=None)
442
443 Return a set of all tasks for an event loop.
444
445 By default all tasks for the current event loop are returned.
Miss Islington (bot)ddc613f2018-05-28 17:16:43 -0700446 If *loop* is ``None``, :func:`get_event_loop` function
447 is used to get the current loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100448
Victor Stinner742520b2013-12-10 12:14:50 +0100449 .. classmethod:: current_task(loop=None)
450
451 Return the currently running task in an event loop or ``None``.
452
453 By default the current task for the current event loop is returned.
454
455 ``None`` is returned when called not in the context of a :class:`Task`.
456
Victor Stinner8d213572014-06-02 23:06:46 +0200457 .. method:: cancel()
458
R David Murray22dd8332014-09-24 11:09:09 -0400459 Request that this task cancel itself.
Victor Stinner8d213572014-06-02 23:06:46 +0200460
461 This arranges for a :exc:`~concurrent.futures.CancelledError` to be
462 thrown into the wrapped coroutine on the next cycle through the event
463 loop. The coroutine then has a chance to clean up or even deny the
464 request using try/except/finally.
465
R David Murray22dd8332014-09-24 11:09:09 -0400466 Unlike :meth:`Future.cancel`, this does not guarantee that the task
Victor Stinner8d213572014-06-02 23:06:46 +0200467 will be cancelled: the exception might be caught and acted upon, delaying
R David Murray22dd8332014-09-24 11:09:09 -0400468 cancellation of the task or preventing cancellation completely. The task
469 may also return a value or raise a different exception.
Victor Stinner8d213572014-06-02 23:06:46 +0200470
471 Immediately after this method is called, :meth:`~Future.cancelled` will
472 not return ``True`` (unless the task was already cancelled). A task will
473 be marked as cancelled when the wrapped coroutine terminates with a
474 :exc:`~concurrent.futures.CancelledError` exception (even if
475 :meth:`cancel` was not called).
476
477 .. method:: get_stack(\*, limit=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100478
479 Return the list of stack frames for this task's coroutine.
480
Andrew Svetlovf1240162016-01-11 14:40:35 +0200481 If the coroutine is not done, this returns the stack where it is
482 suspended. If the coroutine has completed successfully or was
483 cancelled, this returns an empty list. If the coroutine was
484 terminated by an exception, this returns the list of traceback
485 frames.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100486
487 The frames are always ordered from oldest to newest.
488
Brian Curtina1afeec2014-02-08 18:36:14 -0600489 The optional limit gives the maximum number of frames to return; by
Victor Stinnerea3183f2013-12-03 01:08:00 +0100490 default all available frames are returned. Its meaning differs depending
491 on whether a stack or a traceback is returned: the newest frames of a
492 stack are returned, but the oldest frames of a traceback are returned.
493 (This matches the behavior of the traceback module.)
494
495 For reasons beyond our control, only one stack frame is returned for a
496 suspended coroutine.
497
498 .. method:: print_stack(\*, limit=None, file=None)
499
500 Print the stack or traceback for this task's coroutine.
501
502 This produces output similar to that of the traceback module, for the
503 frames retrieved by get_stack(). The limit argument is passed to
504 get_stack(). The file argument is an I/O stream to which the output
R David Murray22dd8332014-09-24 11:09:09 -0400505 is written; by default output is written to sys.stderr.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100506
507
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100508Example: Parallel execution of tasks
509^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
510
511Example executing 3 tasks (A, B, C) in parallel::
512
513 import asyncio
514
Berker Peksagd5adb632017-02-01 22:37:16 +0300515 async def factorial(name, number):
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100516 f = 1
Victor Stinner34f29462013-12-10 02:51:05 +0100517 for i in range(2, number+1):
518 print("Task %s: Compute factorial(%s)..." % (name, i))
Berker Peksagd5adb632017-02-01 22:37:16 +0300519 await asyncio.sleep(1)
Victor Stinner34f29462013-12-10 02:51:05 +0100520 f *= i
521 print("Task %s: factorial(%s) = %s" % (name, number, f))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100522
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100523 loop = asyncio.get_event_loop()
Berker Peksagd5adb632017-02-01 22:37:16 +0300524 loop.run_until_complete(asyncio.gather(
525 factorial("A", 2),
526 factorial("B", 3),
527 factorial("C", 4),
528 ))
Victor Stinnerf40c6632014-01-28 23:32:40 +0100529 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100530
531Output::
532
Victor Stinner34f29462013-12-10 02:51:05 +0100533 Task A: Compute factorial(2)...
534 Task B: Compute factorial(2)...
535 Task C: Compute factorial(2)...
536 Task A: factorial(2) = 2
537 Task B: Compute factorial(3)...
538 Task C: Compute factorial(3)...
539 Task B: factorial(3) = 6
540 Task C: Compute factorial(4)...
541 Task C: factorial(4) = 24
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100542
Victor Stinner34f29462013-12-10 02:51:05 +0100543A task is automatically scheduled for execution when it is created. The event
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100544loop stops when all tasks are done.
545
546
Victor Stinnerea3183f2013-12-03 01:08:00 +0100547Task functions
548--------------
549
Eli Bendersky029981b2014-01-20 07:02:22 -0800550.. note::
551
Martin Panterc04fb562016-02-10 05:44:01 +0000552 In the functions below, the optional *loop* argument allows explicitly setting
Eli Bendersky029981b2014-01-20 07:02:22 -0800553 the event loop object used by the underlying task or coroutine. If it's
554 not provided, the default event loop is used.
555
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200556
Miss Islington (bot)ee28cd52018-03-12 12:12:05 -0700557.. function:: current_task(loop=None)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200558
559 Return the current running :class:`Task` instance or ``None``, if
560 no task is running.
561
562 If *loop* is ``None`` :func:`get_running_loop` is used to get
563 the current loop.
564
565 .. versionadded:: 3.7
566
567
Miss Islington (bot)ee28cd52018-03-12 12:12:05 -0700568.. function:: all_tasks(loop=None)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200569
570 Return a set of :class:`Task` objects created for the loop.
571
Miss Islington (bot)ddc613f2018-05-28 17:16:43 -0700572 If *loop* is ``None``, :func:`get_running_loop` is used for getting
573 current loop (contrary to the deprecated :meth:`Task.all_tasks` method
574 that uses :func:`get_event_loop`.)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200575
576 .. versionadded:: 3.7
577
578
Victor Stinner99c2ab42013-12-03 19:17:25 +0100579.. function:: as_completed(fs, \*, loop=None, timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100580
Victor Stinner99c2ab42013-12-03 19:17:25 +0100581 Return an iterator whose values, when waited for, are :class:`Future`
582 instances.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100583
Victor Stinner28d0ae482014-05-29 00:04:57 +0200584 Raises :exc:`asyncio.TimeoutError` if the timeout occurs before all Futures
585 are done.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100586
587 Example::
588
589 for f in as_completed(fs):
Andrew Svetlov88743422017-12-11 17:35:49 +0200590 result = await f # The 'await' may raise
Victor Stinnerea3183f2013-12-03 01:08:00 +0100591 # Use result
592
593 .. note::
594
595 The futures ``f`` are not necessarily members of fs.
596
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400597.. function:: ensure_future(coro_or_future, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100598
Victor Stinner980dd842014-10-12 21:36:17 +0200599 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
600 a future. Return a :class:`Task` object.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100601
Victor Stinner99c2ab42013-12-03 19:17:25 +0100602 If the argument is a :class:`Future`, it is returned directly.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100603
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400604 .. versionadded:: 3.4.4
605
Yury Selivanove319ab02015-12-15 00:45:24 -0500606 .. versionchanged:: 3.5.1
607 The function accepts any :term:`awaitable` object.
608
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200609 .. note::
610
611 :func:`create_task` (added in Python 3.7) is the preferable way
612 for spawning new tasks.
613
Victor Stinner337e03f2014-08-11 01:11:13 +0200614 .. seealso::
615
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200616 The :func:`create_task` function and
617 :meth:`AbstractEventLoop.create_task` method.
Victor Stinner337e03f2014-08-11 01:11:13 +0200618
adisbladis824f6872017-06-09 14:28:59 +0800619.. function:: wrap_future(future, \*, loop=None)
620
621 Wrap a :class:`concurrent.futures.Future` object in a :class:`Future`
622 object.
623
Victor Stinner99c2ab42013-12-03 19:17:25 +0100624.. function:: gather(\*coros_or_futures, loop=None, return_exceptions=False)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100625
Victor Stinner59759ff2014-01-16 19:30:21 +0100626 Return a future aggregating results from the given coroutine objects or
627 futures.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100628
629 All futures must share the same event loop. If all the tasks are done
630 successfully, the returned future's result is the list of results (in the
631 order of the original sequence, not necessarily the order of results
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300632 arrival). If *return_exceptions* is true, exceptions in the tasks are
Victor Stinnerea3183f2013-12-03 01:08:00 +0100633 treated the same as successful results, and gathered in the result list;
634 otherwise, the first raised exception will be immediately propagated to the
635 returned future.
636
637 Cancellation: if the outer Future is cancelled, all children (that have not
638 completed yet) are also cancelled. If any child is cancelled, this is
639 treated as if it raised :exc:`~concurrent.futures.CancelledError` -- the
640 outer Future is *not* cancelled in this case. (This is to prevent the
641 cancellation of one child to cause other children to be cancelled.)
642
Miss Islington (bot)03643422018-05-29 15:29:12 -0700643 .. versionchanged:: 3.7.0
644 If the *gather* itself is cancelled, the cancellation is propagated
645 regardless of *return_exceptions*.
646
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100647.. function:: iscoroutine(obj)
648
Yury Selivanov66f88282015-06-24 11:04:15 -0400649 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`,
650 which may be based on a generator or an :keyword:`async def` coroutine.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100651
Yury Selivanov66f88282015-06-24 11:04:15 -0400652.. function:: iscoroutinefunction(func)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100653
Yury Selivanov66f88282015-06-24 11:04:15 -0400654 Return ``True`` if *func* is determined to be a :ref:`coroutine function
655 <coroutine>`, which may be a decorated generator function or an
656 :keyword:`async def` function.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100657
Andrew Svetlovf1240162016-01-11 14:40:35 +0200658.. function:: run_coroutine_threadsafe(coro, loop)
659
660 Submit a :ref:`coroutine object <coroutine>` to a given event loop.
661
662 Return a :class:`concurrent.futures.Future` to access the result.
663
664 This function is meant to be called from a different thread than the one
665 where the event loop is running. Usage::
666
667 # Create a coroutine
668 coro = asyncio.sleep(1, result=3)
669 # Submit the coroutine to a given loop
670 future = asyncio.run_coroutine_threadsafe(coro, loop)
671 # Wait for the result with an optional timeout argument
672 assert future.result(timeout) == 3
673
674 If an exception is raised in the coroutine, the returned future will be
675 notified. It can also be used to cancel the task in the event loop::
676
677 try:
678 result = future.result(timeout)
679 except asyncio.TimeoutError:
680 print('The coroutine took too long, cancelling the task...')
681 future.cancel()
682 except Exception as exc:
683 print('The coroutine raised an exception: {!r}'.format(exc))
684 else:
685 print('The coroutine returned: {!r}'.format(result))
686
687 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
688 section of the documentation.
689
690 .. note::
691
Andrew Svetlov3af81f22016-01-11 14:45:25 +0200692 Unlike other functions from the module,
693 :func:`run_coroutine_threadsafe` requires the *loop* argument to
Zachary Waref9aff922016-06-01 00:01:10 -0500694 be passed explicitly.
Andrew Svetlovf1240162016-01-11 14:40:35 +0200695
Andrew Svetlovea471342016-01-11 15:41:43 +0200696 .. versionadded:: 3.5.1
Andrew Svetlovf1240162016-01-11 14:40:35 +0200697
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100698.. coroutinefunction:: sleep(delay, result=None, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100699
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500700 Create a :ref:`coroutine <coroutine>` that completes after a given
Eli Bendersky2d26af82014-01-20 06:59:23 -0800701 time (in seconds). If *result* is provided, it is produced to the caller
702 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100703
Victor Stinner45b27ed2014-02-01 02:36:43 +0100704 The resolution of the sleep depends on the :ref:`granularity of the event
705 loop <asyncio-delayed-calls>`.
706
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100707 This function is a :ref:`coroutine <coroutine>`.
708
Miss Islington (bot)0f7cf7e2018-03-03 13:22:49 -0800709.. coroutinefunction:: shield(arg, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100710
711 Wait for a future, shielding it from cancellation.
712
713 The statement::
714
Andrew Svetlov88743422017-12-11 17:35:49 +0200715 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100716
717 is exactly equivalent to the statement::
718
Andrew Svetlov88743422017-12-11 17:35:49 +0200719 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100720
721 *except* that if the coroutine containing it is cancelled, the task running
722 in ``something()`` is not cancelled. From the point of view of
723 ``something()``, the cancellation did not happen. But its caller is still
724 cancelled, so the yield-from expression still raises
725 :exc:`~concurrent.futures.CancelledError`. Note: If ``something()`` is
726 cancelled by other means this will still cancel ``shield()``.
727
728 If you want to completely ignore cancellation (not recommended) you can
729 combine ``shield()`` with a try/except clause, as follows::
730
731 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200732 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100733 except CancelledError:
734 res = None
735
Yury Selivanov950204d2016-05-16 16:23:00 -0400736
Andrew Svetlovf1240162016-01-11 14:40:35 +0200737.. coroutinefunction:: wait(futures, \*, loop=None, timeout=None,\
738 return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100739
Victor Stinner59759ff2014-01-16 19:30:21 +0100740 Wait for the Futures and coroutine objects given by the sequence *futures*
741 to complete. Coroutines will be wrapped in Tasks. Returns two sets of
Victor Stinner99c2ab42013-12-03 19:17:25 +0100742 :class:`Future`: (done, pending).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100743
Victor Stinnerdb74d982014-06-10 11:16:05 +0200744 The sequence *futures* must not be empty.
745
Victor Stinnerea3183f2013-12-03 01:08:00 +0100746 *timeout* can be used to control the maximum number of seconds to wait before
747 returning. *timeout* can be an int or float. If *timeout* is not specified
748 or ``None``, there is no limit to the wait time.
749
750 *return_when* indicates when this function should return. It must be one of
Victor Stinner933a8c82013-12-03 01:59:38 +0100751 the following constants of the :mod:`concurrent.futures` module:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100752
753 .. tabularcolumns:: |l|L|
754
755 +-----------------------------+----------------------------------------+
756 | Constant | Description |
757 +=============================+========================================+
758 | :const:`FIRST_COMPLETED` | The function will return when any |
759 | | future finishes or is cancelled. |
760 +-----------------------------+----------------------------------------+
761 | :const:`FIRST_EXCEPTION` | The function will return when any |
762 | | future finishes by raising an |
763 | | exception. If no future raises an |
764 | | exception then it is equivalent to |
765 | | :const:`ALL_COMPLETED`. |
766 +-----------------------------+----------------------------------------+
767 | :const:`ALL_COMPLETED` | The function will return when all |
768 | | futures finish or are cancelled. |
769 +-----------------------------+----------------------------------------+
770
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500771 This function is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100772
773 Usage::
774
Andrew Svetlov88743422017-12-11 17:35:49 +0200775 done, pending = await asyncio.wait(fs)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100776
777 .. note::
778
Victor Stinner28d0ae482014-05-29 00:04:57 +0200779 This does not raise :exc:`asyncio.TimeoutError`! Futures that aren't done
780 when the timeout occurs are returned in the second set.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100781
Victor Stinner3e09e322013-12-03 01:22:06 +0100782
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100783.. coroutinefunction:: wait_for(fut, timeout, \*, loop=None)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100784
785 Wait for the single :class:`Future` or :ref:`coroutine object <coroutine>`
Victor Stinner530ef2f2014-07-08 12:39:10 +0200786 to complete with timeout. If *timeout* is ``None``, block until the future
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100787 completes.
788
Victor Stinner337e03f2014-08-11 01:11:13 +0200789 Coroutine will be wrapped in :class:`Task`.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100790
791 Returns result of the Future or coroutine. When a timeout occurs, it
Victor Stinner28d0ae482014-05-29 00:04:57 +0200792 cancels the task and raises :exc:`asyncio.TimeoutError`. To avoid the task
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100793 cancellation, wrap it in :func:`shield`.
794
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200795 If the wait is cancelled, the future *fut* is also cancelled.
796
Victor Stinner530ef2f2014-07-08 12:39:10 +0200797 This function is a :ref:`coroutine <coroutine>`, usage::
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500798
Andrew Svetlov88743422017-12-11 17:35:49 +0200799 result = await asyncio.wait_for(fut, 60.0)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100800
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200801 .. versionchanged:: 3.4.3
802 If the wait is cancelled, the future *fut* is now also cancelled.