blob: 9f4433ddc339153b897a088a8f6f5c8d219680f4 [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
Yury Selivanov7c7605f2018-09-11 09:54:40 -070066using the :func:`ensure_future` function or the :meth:`loop.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 Pranskevichus63536bd2018-05-19 23:15:06 -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
Yury Selivanovd8d715f2018-05-17 13:44:00 -0400111 **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>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132 example uses the :meth:`loop.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
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700162 :meth:`loop.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
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700193The "Task" is created by the :meth:`loop.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
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700198which uses :meth:`loop.call_later` to wake up the task in 1 second.
Victor Stinner28d0ae482014-05-29 00:04:57 +0200199
200
Victor Stinner99c2ab42013-12-03 19:17:25 +0100201Future
202------
203
204.. class:: Future(\*, loop=None)
205
206 This class is *almost* compatible with :class:`concurrent.futures.Future`.
207
208 Differences:
209
210 - :meth:`result` and :meth:`exception` do not take a timeout argument and
211 raise an exception when the future isn't done yet.
212
213 - Callbacks registered with :meth:`add_done_callback` are always called
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700214 via the event loop's :meth:`loop.call_soon`.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100215
216 - This class is not compatible with the :func:`~concurrent.futures.wait` and
217 :func:`~concurrent.futures.as_completed` functions in the
218 :mod:`concurrent.futures` package.
219
Victor Stinner83704962015-02-25 14:24:15 +0100220 This class is :ref:`not thread safe <asyncio-multithreading>`.
221
Victor Stinner99c2ab42013-12-03 19:17:25 +0100222 .. method:: cancel()
223
224 Cancel the future and schedule callbacks.
225
226 If the future is already done or cancelled, return ``False``. Otherwise,
227 change the future's state to cancelled, schedule the callbacks and return
228 ``True``.
229
230 .. method:: cancelled()
231
232 Return ``True`` if the future was cancelled.
233
234 .. method:: done()
235
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300236 Return ``True`` if the future is done.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100237
238 Done means either that a result / exception are available, or that the
239 future was cancelled.
240
241 .. method:: result()
242
243 Return the result this future represents.
244
245 If the future has been cancelled, raises :exc:`CancelledError`. If the
246 future's result isn't yet available, raises :exc:`InvalidStateError`. If
247 the future is done and has an exception set, this exception is raised.
248
249 .. method:: exception()
250
251 Return the exception that was set on this future.
252
253 The exception (or ``None`` if no exception was set) is returned only if
254 the future is done. If the future has been cancelled, raises
255 :exc:`CancelledError`. If the future isn't done yet, raises
256 :exc:`InvalidStateError`.
257
Yury Selivanov28b91782018-05-23 13:35:04 -0400258 .. method:: add_done_callback(callback, *, context=None)
Victor Stinner99c2ab42013-12-03 19:17:25 +0100259
260 Add a callback to be run when the future becomes done.
261
Yury Selivanov28b91782018-05-23 13:35:04 -0400262 The *callback* is called with a single argument - the future object. If the
Victor Stinner99c2ab42013-12-03 19:17:25 +0100263 future is already done when this is called, the callback is scheduled
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700264 with :meth:`loop.call_soon`.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100265
Yury Selivanov28b91782018-05-23 13:35:04 -0400266 An optional keyword-only *context* argument allows specifying a custom
267 :class:`contextvars.Context` for the *callback* to run in. The current
268 context is used when no *context* is provided.
269
Victor Stinner8464c242014-11-28 13:15:41 +0100270 :ref:`Use functools.partial to pass parameters to the callback
271 <asyncio-pass-keywords>`. For example,
272 ``fut.add_done_callback(functools.partial(print, "Future:",
273 flush=True))`` will call ``print("Future:", fut, flush=True)``.
274
Yury Selivanov28b91782018-05-23 13:35:04 -0400275 .. versionchanged:: 3.7
276 The *context* keyword-only parameter was added. See :pep:`567`
277 for more details.
278
Victor Stinner99c2ab42013-12-03 19:17:25 +0100279 .. method:: remove_done_callback(fn)
280
281 Remove all instances of a callback from the "call when done" list.
282
283 Returns the number of callbacks removed.
284
285 .. method:: set_result(result)
286
287 Mark the future done and set its result.
288
289 If the future is already done when this method is called, raises
290 :exc:`InvalidStateError`.
291
292 .. method:: set_exception(exception)
293
294 Mark the future done and set an exception.
295
296 If the future is already done when this method is called, raises
297 :exc:`InvalidStateError`.
298
Yury Selivanovca9b36c2017-12-23 15:04:15 -0500299 .. method:: get_loop()
300
301 Return the event loop the future object is bound to.
302
303 .. versionadded:: 3.7
304
Victor Stinner99c2ab42013-12-03 19:17:25 +0100305
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100306Example: Future with run_until_complete()
307^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
308
Victor Stinner59759ff2014-01-16 19:30:21 +0100309Example combining a :class:`Future` and a :ref:`coroutine function
310<coroutine>`::
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100311
312 import asyncio
313
Berker Peksagf5928672017-02-07 11:27:09 +0300314 async def slow_operation(future):
315 await asyncio.sleep(1)
Victor Stinner04e05da2014-02-17 10:54:30 +0100316 future.set_result('Future is done!')
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100317
318 loop = asyncio.get_event_loop()
319 future = asyncio.Future()
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400320 asyncio.ensure_future(slow_operation(future))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100321 loop.run_until_complete(future)
322 print(future.result())
Victor Stinnerf40c6632014-01-28 23:32:40 +0100323 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100324
Terry Jan Reedyc935a952014-07-24 02:33:14 -0400325The coroutine function is responsible for the computation (which takes 1 second)
Victor Stinner59759ff2014-01-16 19:30:21 +0100326and it stores the result into the future. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700327:meth:`loop.run_until_complete` method waits for the completion of
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100328the future.
329
330.. note::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700331 The :meth:`loop.run_until_complete` method uses internally the
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100332 :meth:`~Future.add_done_callback` method to be notified when the future is
333 done.
334
335
336Example: Future with run_forever()
337^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
338
339The previous example can be written differently using the
340:meth:`Future.add_done_callback` method to describe explicitly the control
341flow::
342
343 import asyncio
344
Berker Peksagf5928672017-02-07 11:27:09 +0300345 async def slow_operation(future):
346 await asyncio.sleep(1)
Victor Stinner04e05da2014-02-17 10:54:30 +0100347 future.set_result('Future is done!')
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100348
349 def got_result(future):
350 print(future.result())
351 loop.stop()
352
353 loop = asyncio.get_event_loop()
354 future = asyncio.Future()
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400355 asyncio.ensure_future(slow_operation(future))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100356 future.add_done_callback(got_result)
Victor Stinner04e05da2014-02-17 10:54:30 +0100357 try:
358 loop.run_forever()
359 finally:
360 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100361
Victor Stinner039f7032014-12-02 17:52:45 +0100362In this example, the future is used to link ``slow_operation()`` to
363``got_result()``: when ``slow_operation()`` is done, ``got_result()`` is called
364with the result.
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100365
366
Victor Stinnerea3183f2013-12-03 01:08:00 +0100367Task
368----
369
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300370.. function:: create_task(coro, \*, name=None)
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200371
372 Wrap a :ref:`coroutine <coroutine>` *coro* into a task and schedule
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300373 its execution. Return the task object.
374
375 If *name* is not ``None``, it is set as the name of the task using
376 :meth:`Task.set_name`.
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200377
378 The task is executed in :func:`get_running_loop` context,
379 :exc:`RuntimeError` is raised if there is no running loop in
380 current thread.
381
382 .. versionadded:: 3.7
383
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300384 .. versionchanged:: 3.8
385 Added the ``name`` parameter.
386
387.. class:: Task(coro, \*, loop=None, name=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100388
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200389 A unit for concurrent running of :ref:`coroutines <coroutine>`,
390 subclass of :class:`Future`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200391
R David Murray22dd8332014-09-24 11:09:09 -0400392 A task is responsible for executing a coroutine object in an event loop. If
Victor Stinner530ef2f2014-07-08 12:39:10 +0200393 the wrapped coroutine yields from a future, the task suspends the execution
Berker Peksag002b0a72016-10-04 20:45:47 +0300394 of the wrapped coroutine and waits for the completion of the future. When
Victor Stinner530ef2f2014-07-08 12:39:10 +0200395 the future is done, the execution of the wrapped coroutine restarts with the
396 result or the exception of the future.
397
398 Event loops use cooperative scheduling: an event loop only runs one task at
R David Murray22dd8332014-09-24 11:09:09 -0400399 a time. Other tasks may run in parallel if other event loops are
Victor Stinner530ef2f2014-07-08 12:39:10 +0200400 running in different threads. While a task waits for the completion of a
401 future, the event loop executes a new task.
402
luzpaza5293b42017-11-05 07:37:50 -0600403 The cancellation of a task is different from the cancellation of a
Andrew Svetlovf1240162016-01-11 14:40:35 +0200404 future. Calling :meth:`cancel` will throw a
405 :exc:`~concurrent.futures.CancelledError` to the wrapped
406 coroutine. :meth:`~Future.cancelled` only returns ``True`` if the
Victor Stinner530ef2f2014-07-08 12:39:10 +0200407 wrapped coroutine did not catch the
408 :exc:`~concurrent.futures.CancelledError` exception, or raised a
409 :exc:`~concurrent.futures.CancelledError` exception.
410
411 If a pending task is destroyed, the execution of its wrapped :ref:`coroutine
412 <coroutine>` did not complete. It is probably a bug and a warning is
413 logged: see :ref:`Pending task destroyed <asyncio-pending-task-destroyed>`.
414
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200415 Don't directly create :class:`Task` instances: use the :func:`create_task`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700416 function or the :meth:`loop.create_task` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100417
Yury Selivanov28b91782018-05-23 13:35:04 -0400418 Tasks support the :mod:`contextvars` module. When a Task
419 is created it copies the current context and later runs its coroutine
420 in the copied context. See :pep:`567` for more details.
421
Victor Stinner83704962015-02-25 14:24:15 +0100422 This class is :ref:`not thread safe <asyncio-multithreading>`.
423
Yury Selivanov28b91782018-05-23 13:35:04 -0400424 .. versionchanged:: 3.7
425 Added support for the :mod:`contextvars` module.
426
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300427 .. versionchanged:: 3.8
428 Added the ``name`` parameter.
429
Victor Stinnerea3183f2013-12-03 01:08:00 +0100430 .. classmethod:: all_tasks(loop=None)
431
432 Return a set of all tasks for an event loop.
433
434 By default all tasks for the current event loop are returned.
Yury Selivanov416c1eb2018-05-28 17:54:02 -0400435 If *loop* is ``None``, :func:`get_event_loop` function
436 is used to get the current loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100437
Victor Stinner742520b2013-12-10 12:14:50 +0100438 .. classmethod:: current_task(loop=None)
439
440 Return the currently running task in an event loop or ``None``.
441
442 By default the current task for the current event loop is returned.
443
444 ``None`` is returned when called not in the context of a :class:`Task`.
445
Victor Stinner8d213572014-06-02 23:06:46 +0200446 .. method:: cancel()
447
R David Murray22dd8332014-09-24 11:09:09 -0400448 Request that this task cancel itself.
Victor Stinner8d213572014-06-02 23:06:46 +0200449
450 This arranges for a :exc:`~concurrent.futures.CancelledError` to be
451 thrown into the wrapped coroutine on the next cycle through the event
452 loop. The coroutine then has a chance to clean up or even deny the
453 request using try/except/finally.
454
R David Murray22dd8332014-09-24 11:09:09 -0400455 Unlike :meth:`Future.cancel`, this does not guarantee that the task
Victor Stinner8d213572014-06-02 23:06:46 +0200456 will be cancelled: the exception might be caught and acted upon, delaying
R David Murray22dd8332014-09-24 11:09:09 -0400457 cancellation of the task or preventing cancellation completely. The task
458 may also return a value or raise a different exception.
Victor Stinner8d213572014-06-02 23:06:46 +0200459
460 Immediately after this method is called, :meth:`~Future.cancelled` will
461 not return ``True`` (unless the task was already cancelled). A task will
462 be marked as cancelled when the wrapped coroutine terminates with a
463 :exc:`~concurrent.futures.CancelledError` exception (even if
464 :meth:`cancel` was not called).
465
466 .. method:: get_stack(\*, limit=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100467
468 Return the list of stack frames for this task's coroutine.
469
Andrew Svetlovf1240162016-01-11 14:40:35 +0200470 If the coroutine is not done, this returns the stack where it is
471 suspended. If the coroutine has completed successfully or was
472 cancelled, this returns an empty list. If the coroutine was
473 terminated by an exception, this returns the list of traceback
474 frames.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100475
476 The frames are always ordered from oldest to newest.
477
Brian Curtina1afeec2014-02-08 18:36:14 -0600478 The optional limit gives the maximum number of frames to return; by
Victor Stinnerea3183f2013-12-03 01:08:00 +0100479 default all available frames are returned. Its meaning differs depending
480 on whether a stack or a traceback is returned: the newest frames of a
481 stack are returned, but the oldest frames of a traceback are returned.
482 (This matches the behavior of the traceback module.)
483
484 For reasons beyond our control, only one stack frame is returned for a
485 suspended coroutine.
486
487 .. method:: print_stack(\*, limit=None, file=None)
488
489 Print the stack or traceback for this task's coroutine.
490
491 This produces output similar to that of the traceback module, for the
492 frames retrieved by get_stack(). The limit argument is passed to
493 get_stack(). The file argument is an I/O stream to which the output
R David Murray22dd8332014-09-24 11:09:09 -0400494 is written; by default output is written to sys.stderr.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100495
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300496 .. method:: get_name()
497
498 Return the name of the task.
499
500 If no name has been explicitly assigned to the task, the default
501 ``Task`` implementation generates a default name during instantiation.
502
503 .. versionadded:: 3.8
504
505 .. method:: set_name(value)
506
507 Set the name of the task.
508
509 The *value* argument can be any object, which is then converted to a
510 string.
511
512 In the default ``Task`` implementation, the name will be visible in the
513 :func:`repr` output of a task object.
514
515 .. versionadded:: 3.8
516
Victor Stinnerea3183f2013-12-03 01:08:00 +0100517
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100518Example: Parallel execution of tasks
519^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
520
521Example executing 3 tasks (A, B, C) in parallel::
522
523 import asyncio
524
Berker Peksagd5adb632017-02-01 22:37:16 +0300525 async def factorial(name, number):
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100526 f = 1
Victor Stinner34f29462013-12-10 02:51:05 +0100527 for i in range(2, number+1):
528 print("Task %s: Compute factorial(%s)..." % (name, i))
Berker Peksagd5adb632017-02-01 22:37:16 +0300529 await asyncio.sleep(1)
Victor Stinner34f29462013-12-10 02:51:05 +0100530 f *= i
531 print("Task %s: factorial(%s) = %s" % (name, number, f))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100532
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100533 loop = asyncio.get_event_loop()
Berker Peksagd5adb632017-02-01 22:37:16 +0300534 loop.run_until_complete(asyncio.gather(
535 factorial("A", 2),
536 factorial("B", 3),
537 factorial("C", 4),
538 ))
Victor Stinnerf40c6632014-01-28 23:32:40 +0100539 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100540
541Output::
542
Victor Stinner34f29462013-12-10 02:51:05 +0100543 Task A: Compute factorial(2)...
544 Task B: Compute factorial(2)...
545 Task C: Compute factorial(2)...
546 Task A: factorial(2) = 2
547 Task B: Compute factorial(3)...
548 Task C: Compute factorial(3)...
549 Task B: factorial(3) = 6
550 Task C: Compute factorial(4)...
551 Task C: factorial(4) = 24
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100552
Victor Stinner34f29462013-12-10 02:51:05 +0100553A task is automatically scheduled for execution when it is created. The event
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100554loop stops when all tasks are done.
555
556
Victor Stinnerea3183f2013-12-03 01:08:00 +0100557Task functions
558--------------
559
Eli Bendersky029981b2014-01-20 07:02:22 -0800560.. note::
561
Martin Panterc04fb562016-02-10 05:44:01 +0000562 In the functions below, the optional *loop* argument allows explicitly setting
Eli Bendersky029981b2014-01-20 07:02:22 -0800563 the event loop object used by the underlying task or coroutine. If it's
564 not provided, the default event loop is used.
565
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200566
Andrew Svetlovb21505e2018-03-12 20:50:50 +0200567.. function:: current_task(loop=None)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200568
569 Return the current running :class:`Task` instance or ``None``, if
570 no task is running.
571
572 If *loop* is ``None`` :func:`get_running_loop` is used to get
573 the current loop.
574
575 .. versionadded:: 3.7
576
577
Andrew Svetlovb21505e2018-03-12 20:50:50 +0200578.. function:: all_tasks(loop=None)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200579
580 Return a set of :class:`Task` objects created for the loop.
581
Yury Selivanov416c1eb2018-05-28 17:54:02 -0400582 If *loop* is ``None``, :func:`get_running_loop` is used for getting
583 current loop (contrary to the deprecated :meth:`Task.all_tasks` method
584 that uses :func:`get_event_loop`.)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200585
586 .. versionadded:: 3.7
587
588
Victor Stinner99c2ab42013-12-03 19:17:25 +0100589.. function:: as_completed(fs, \*, loop=None, timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100590
Victor Stinner99c2ab42013-12-03 19:17:25 +0100591 Return an iterator whose values, when waited for, are :class:`Future`
592 instances.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100593
Victor Stinner28d0ae482014-05-29 00:04:57 +0200594 Raises :exc:`asyncio.TimeoutError` if the timeout occurs before all Futures
595 are done.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100596
597 Example::
598
599 for f in as_completed(fs):
Andrew Svetlov88743422017-12-11 17:35:49 +0200600 result = await f # The 'await' may raise
Victor Stinnerea3183f2013-12-03 01:08:00 +0100601 # Use result
602
603 .. note::
604
605 The futures ``f`` are not necessarily members of fs.
606
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400607.. function:: ensure_future(coro_or_future, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100608
Victor Stinner980dd842014-10-12 21:36:17 +0200609 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
610 a future. Return a :class:`Task` object.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100611
Victor Stinner99c2ab42013-12-03 19:17:25 +0100612 If the argument is a :class:`Future`, it is returned directly.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100613
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400614 .. versionadded:: 3.4.4
615
Yury Selivanove319ab02015-12-15 00:45:24 -0500616 .. versionchanged:: 3.5.1
617 The function accepts any :term:`awaitable` object.
618
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200619 .. note::
620
621 :func:`create_task` (added in Python 3.7) is the preferable way
622 for spawning new tasks.
623
Victor Stinner337e03f2014-08-11 01:11:13 +0200624 .. seealso::
625
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200626 The :func:`create_task` function and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700627 :meth:`loop.create_task` method.
Victor Stinner337e03f2014-08-11 01:11:13 +0200628
adisbladis824f6872017-06-09 14:28:59 +0800629.. function:: wrap_future(future, \*, loop=None)
630
631 Wrap a :class:`concurrent.futures.Future` object in a :class:`Future`
632 object.
633
Victor Stinner99c2ab42013-12-03 19:17:25 +0100634.. function:: gather(\*coros_or_futures, loop=None, return_exceptions=False)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100635
Victor Stinner59759ff2014-01-16 19:30:21 +0100636 Return a future aggregating results from the given coroutine objects or
637 futures.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100638
639 All futures must share the same event loop. If all the tasks are done
640 successfully, the returned future's result is the list of results (in the
641 order of the original sequence, not necessarily the order of results
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300642 arrival). If *return_exceptions* is true, exceptions in the tasks are
Victor Stinnerea3183f2013-12-03 01:08:00 +0100643 treated the same as successful results, and gathered in the result list;
644 otherwise, the first raised exception will be immediately propagated to the
645 returned future.
646
647 Cancellation: if the outer Future is cancelled, all children (that have not
648 completed yet) are also cancelled. If any child is cancelled, this is
649 treated as if it raised :exc:`~concurrent.futures.CancelledError` -- the
650 outer Future is *not* cancelled in this case. (This is to prevent the
651 cancellation of one child to cause other children to be cancelled.)
652
Yury Selivanov863b6742018-05-29 17:20:02 -0400653 .. versionchanged:: 3.7.0
654 If the *gather* itself is cancelled, the cancellation is propagated
655 regardless of *return_exceptions*.
656
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100657.. function:: iscoroutine(obj)
658
Yury Selivanov66f88282015-06-24 11:04:15 -0400659 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`,
660 which may be based on a generator or an :keyword:`async def` coroutine.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100661
Yury Selivanov66f88282015-06-24 11:04:15 -0400662.. function:: iscoroutinefunction(func)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100663
Yury Selivanov66f88282015-06-24 11:04:15 -0400664 Return ``True`` if *func* is determined to be a :ref:`coroutine function
665 <coroutine>`, which may be a decorated generator function or an
666 :keyword:`async def` function.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100667
Andrew Svetlovf1240162016-01-11 14:40:35 +0200668.. function:: run_coroutine_threadsafe(coro, loop)
669
670 Submit a :ref:`coroutine object <coroutine>` to a given event loop.
671
672 Return a :class:`concurrent.futures.Future` to access the result.
673
674 This function is meant to be called from a different thread than the one
675 where the event loop is running. Usage::
676
677 # Create a coroutine
678 coro = asyncio.sleep(1, result=3)
679 # Submit the coroutine to a given loop
680 future = asyncio.run_coroutine_threadsafe(coro, loop)
681 # Wait for the result with an optional timeout argument
682 assert future.result(timeout) == 3
683
684 If an exception is raised in the coroutine, the returned future will be
685 notified. It can also be used to cancel the task in the event loop::
686
687 try:
688 result = future.result(timeout)
689 except asyncio.TimeoutError:
690 print('The coroutine took too long, cancelling the task...')
691 future.cancel()
692 except Exception as exc:
693 print('The coroutine raised an exception: {!r}'.format(exc))
694 else:
695 print('The coroutine returned: {!r}'.format(result))
696
697 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
698 section of the documentation.
699
700 .. note::
701
Andrew Svetlov3af81f22016-01-11 14:45:25 +0200702 Unlike other functions from the module,
703 :func:`run_coroutine_threadsafe` requires the *loop* argument to
Zachary Waref9aff922016-06-01 00:01:10 -0500704 be passed explicitly.
Andrew Svetlovf1240162016-01-11 14:40:35 +0200705
Andrew Svetlovea471342016-01-11 15:41:43 +0200706 .. versionadded:: 3.5.1
Andrew Svetlovf1240162016-01-11 14:40:35 +0200707
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100708.. coroutinefunction:: sleep(delay, result=None, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100709
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500710 Create a :ref:`coroutine <coroutine>` that completes after a given
Eli Bendersky2d26af82014-01-20 06:59:23 -0800711 time (in seconds). If *result* is provided, it is produced to the caller
712 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100713
Victor Stinner45b27ed2014-02-01 02:36:43 +0100714 The resolution of the sleep depends on the :ref:`granularity of the event
715 loop <asyncio-delayed-calls>`.
716
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100717 This function is a :ref:`coroutine <coroutine>`.
718
Joongi Kim13cfd572018-03-04 01:43:54 +0900719.. coroutinefunction:: shield(arg, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100720
721 Wait for a future, shielding it from cancellation.
722
723 The statement::
724
Andrew Svetlov88743422017-12-11 17:35:49 +0200725 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100726
727 is exactly equivalent to the statement::
728
Andrew Svetlov88743422017-12-11 17:35:49 +0200729 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100730
731 *except* that if the coroutine containing it is cancelled, the task running
732 in ``something()`` is not cancelled. From the point of view of
733 ``something()``, the cancellation did not happen. But its caller is still
734 cancelled, so the yield-from expression still raises
735 :exc:`~concurrent.futures.CancelledError`. Note: If ``something()`` is
736 cancelled by other means this will still cancel ``shield()``.
737
738 If you want to completely ignore cancellation (not recommended) you can
739 combine ``shield()`` with a try/except clause, as follows::
740
741 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200742 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100743 except CancelledError:
744 res = None
745
Yury Selivanov950204d2016-05-16 16:23:00 -0400746
Andrew Svetlovf1240162016-01-11 14:40:35 +0200747.. coroutinefunction:: wait(futures, \*, loop=None, timeout=None,\
748 return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100749
Victor Stinner59759ff2014-01-16 19:30:21 +0100750 Wait for the Futures and coroutine objects given by the sequence *futures*
751 to complete. Coroutines will be wrapped in Tasks. Returns two sets of
Victor Stinner99c2ab42013-12-03 19:17:25 +0100752 :class:`Future`: (done, pending).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100753
Victor Stinnerdb74d982014-06-10 11:16:05 +0200754 The sequence *futures* must not be empty.
755
Victor Stinnerea3183f2013-12-03 01:08:00 +0100756 *timeout* can be used to control the maximum number of seconds to wait before
757 returning. *timeout* can be an int or float. If *timeout* is not specified
758 or ``None``, there is no limit to the wait time.
759
760 *return_when* indicates when this function should return. It must be one of
Victor Stinner933a8c82013-12-03 01:59:38 +0100761 the following constants of the :mod:`concurrent.futures` module:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100762
763 .. tabularcolumns:: |l|L|
764
765 +-----------------------------+----------------------------------------+
766 | Constant | Description |
767 +=============================+========================================+
768 | :const:`FIRST_COMPLETED` | The function will return when any |
769 | | future finishes or is cancelled. |
770 +-----------------------------+----------------------------------------+
771 | :const:`FIRST_EXCEPTION` | The function will return when any |
772 | | future finishes by raising an |
773 | | exception. If no future raises an |
774 | | exception then it is equivalent to |
775 | | :const:`ALL_COMPLETED`. |
776 +-----------------------------+----------------------------------------+
777 | :const:`ALL_COMPLETED` | The function will return when all |
778 | | futures finish or are cancelled. |
779 +-----------------------------+----------------------------------------+
780
Elvis Pranskevichusf9aeca22018-05-29 18:21:44 -0400781 Unlike :func:`~asyncio.wait_for`, ``wait()`` will not cancel the futures
Elvis Pranskevichusdec947c2018-05-29 20:14:59 -0400782 when a timeout occurs.
Elvis Pranskevichusf9aeca22018-05-29 18:21:44 -0400783
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500784 This function is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100785
786 Usage::
787
Andrew Svetlov88743422017-12-11 17:35:49 +0200788 done, pending = await asyncio.wait(fs)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100789
790 .. note::
791
Victor Stinner28d0ae482014-05-29 00:04:57 +0200792 This does not raise :exc:`asyncio.TimeoutError`! Futures that aren't done
793 when the timeout occurs are returned in the second set.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100794
Victor Stinner3e09e322013-12-03 01:22:06 +0100795
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100796.. coroutinefunction:: wait_for(fut, timeout, \*, loop=None)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100797
798 Wait for the single :class:`Future` or :ref:`coroutine object <coroutine>`
Victor Stinner530ef2f2014-07-08 12:39:10 +0200799 to complete with timeout. If *timeout* is ``None``, block until the future
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100800 completes.
801
Victor Stinner337e03f2014-08-11 01:11:13 +0200802 Coroutine will be wrapped in :class:`Task`.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100803
804 Returns result of the Future or coroutine. When a timeout occurs, it
Victor Stinner28d0ae482014-05-29 00:04:57 +0200805 cancels the task and raises :exc:`asyncio.TimeoutError`. To avoid the task
Elvis Pranskevichuse2b340a2018-05-29 17:31:01 -0400806 cancellation, wrap it in :func:`shield`. The function will wait until
807 the future is actually cancelled, so the total wait time may exceed
808 the *timeout*.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100809
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200810 If the wait is cancelled, the future *fut* is also cancelled.
811
Victor Stinner530ef2f2014-07-08 12:39:10 +0200812 This function is a :ref:`coroutine <coroutine>`, usage::
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500813
Andrew Svetlov88743422017-12-11 17:35:49 +0200814 result = await asyncio.wait_for(fut, 60.0)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100815
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200816 .. versionchanged:: 3.4.3
817 If the wait is cancelled, the future *fut* is now also cancelled.
Elvis Pranskevichuse2b340a2018-05-29 17:31:01 -0400818
819 .. versionchanged:: 3.7
820 When *fut* is cancelled due to a timeout, ``wait_for`` now waits
821 for *fut* to be cancelled. Previously,
822 it raised :exc:`~asyncio.TimeoutError` immediately.