blob: 364323d5ca8b65bf9c01843114088de97ba5cb09 [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
Yury Selivanov02a0a192017-12-14 09:42:21 -050095.. function:: asyncio.run(coro, \*, debug=False)
96
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
111
112
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100113.. _asyncio-hello-world-coroutine:
114
Victor Stinner7f314ed2014-10-15 18:49:16 +0200115Example: Hello World coroutine
116^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100117
Victor Stinner7f314ed2014-10-15 18:49:16 +0200118Example of coroutine displaying ``"Hello World"``::
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100119
120 import asyncio
121
Yury Selivanov66f88282015-06-24 11:04:15 -0400122 async def hello_world():
Victor Stinner7f314ed2014-10-15 18:49:16 +0200123 print("Hello World!")
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100124
Yury Selivanov02a0a192017-12-14 09:42:21 -0500125 asyncio.run(hello_world())
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100126
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100127.. seealso::
128
Victor Stinner7f314ed2014-10-15 18:49:16 +0200129 The :ref:`Hello World with call_soon() <asyncio-hello-world-callback>`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700130 example uses the :meth:`AbstractEventLoop.call_soon` method to schedule a
Victor Stinner7f314ed2014-10-15 18:49:16 +0200131 callback.
132
133
134.. _asyncio-date-coroutine:
135
136Example: Coroutine displaying the current date
137^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
138
139Example of coroutine displaying the current date every second during 5 seconds
140using the :meth:`sleep` function::
141
142 import asyncio
143 import datetime
144
Yury Selivanov02a0a192017-12-14 09:42:21 -0500145 async def display_date():
146 loop = asyncio.get_running_loop()
Yury Selivanov66f88282015-06-24 11:04:15 -0400147 end_time = loop.time() + 5.0
148 while True:
149 print(datetime.datetime.now())
150 if (loop.time() + 1.0) >= end_time:
151 break
152 await asyncio.sleep(1)
153
Yury Selivanov02a0a192017-12-14 09:42:21 -0500154 asyncio.run(display_date())
Yury Selivanov66f88282015-06-24 11:04:15 -0400155
Victor Stinner7f314ed2014-10-15 18:49:16 +0200156.. seealso::
157
158 The :ref:`display the current date with call_later()
159 <asyncio-date-callback>` example uses a callback with the
Guido van Rossumf68afd82016-08-08 09:41:21 -0700160 :meth:`AbstractEventLoop.call_later` method.
Victor Stinner7f314ed2014-10-15 18:49:16 +0200161
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100162
163Example: Chain coroutines
164^^^^^^^^^^^^^^^^^^^^^^^^^
165
166Example chaining coroutines::
167
168 import asyncio
169
Yury Selivanov66f88282015-06-24 11:04:15 -0400170 async def compute(x, y):
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100171 print("Compute %s + %s ..." % (x, y))
Yury Selivanov66f88282015-06-24 11:04:15 -0400172 await asyncio.sleep(1.0)
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100173 return x + y
174
Yury Selivanov66f88282015-06-24 11:04:15 -0400175 async def print_sum(x, y):
176 result = await compute(x, y)
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100177 print("%s + %s = %s" % (x, y, result))
178
179 loop = asyncio.get_event_loop()
180 loop.run_until_complete(print_sum(1, 2))
Victor Stinnerf40c6632014-01-28 23:32:40 +0100181 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100182
183``compute()`` is chained to ``print_sum()``: ``print_sum()`` coroutine waits
Brian Curtina1afeec2014-02-08 18:36:14 -0600184until ``compute()`` is completed before returning its result.
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100185
Victor Stinner1c4b8922013-12-12 12:35:17 +0100186Sequence diagram of the example:
187
188.. image:: tulip_coro.png
189 :align: center
190
Guido van Rossumf68afd82016-08-08 09:41:21 -0700191The "Task" is created by the :meth:`AbstractEventLoop.run_until_complete` method
Victor Stinner59759ff2014-01-16 19:30:21 +0100192when it gets a coroutine object instead of a task.
Victor Stinner86e139a2013-12-13 12:51:24 +0100193
194The diagram shows the control flow, it does not describe exactly how things
195work internally. For example, the sleep coroutine creates an internal future
Guido van Rossumf68afd82016-08-08 09:41:21 -0700196which uses :meth:`AbstractEventLoop.call_later` to wake up the task in 1 second.
Victor Stinner1c4b8922013-12-12 12:35:17 +0100197
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100198
Victor Stinner99c2ab42013-12-03 19:17:25 +0100199InvalidStateError
200-----------------
201
202.. exception:: InvalidStateError
203
204 The operation is not allowed in this state.
205
206
Victor Stinner28d0ae482014-05-29 00:04:57 +0200207TimeoutError
208------------
209
210.. exception:: TimeoutError
211
212 The operation exceeded the given deadline.
213
214.. note::
215
216 This exception is different from the builtin :exc:`TimeoutError` exception!
217
218
Victor Stinner99c2ab42013-12-03 19:17:25 +0100219Future
220------
221
222.. class:: Future(\*, loop=None)
223
224 This class is *almost* compatible with :class:`concurrent.futures.Future`.
225
226 Differences:
227
228 - :meth:`result` and :meth:`exception` do not take a timeout argument and
229 raise an exception when the future isn't done yet.
230
231 - Callbacks registered with :meth:`add_done_callback` are always called
Antoine Pitrou22b11282017-11-07 17:03:28 +0100232 via the event loop's :meth:`~AbstractEventLoop.call_soon`.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100233
234 - This class is not compatible with the :func:`~concurrent.futures.wait` and
235 :func:`~concurrent.futures.as_completed` functions in the
236 :mod:`concurrent.futures` package.
237
Victor Stinner83704962015-02-25 14:24:15 +0100238 This class is :ref:`not thread safe <asyncio-multithreading>`.
239
Victor Stinner99c2ab42013-12-03 19:17:25 +0100240 .. method:: cancel()
241
242 Cancel the future and schedule callbacks.
243
244 If the future is already done or cancelled, return ``False``. Otherwise,
245 change the future's state to cancelled, schedule the callbacks and return
246 ``True``.
247
248 .. method:: cancelled()
249
250 Return ``True`` if the future was cancelled.
251
252 .. method:: done()
253
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300254 Return ``True`` if the future is done.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100255
256 Done means either that a result / exception are available, or that the
257 future was cancelled.
258
259 .. method:: result()
260
261 Return the result this future represents.
262
263 If the future has been cancelled, raises :exc:`CancelledError`. If the
264 future's result isn't yet available, raises :exc:`InvalidStateError`. If
265 the future is done and has an exception set, this exception is raised.
266
267 .. method:: exception()
268
269 Return the exception that was set on this future.
270
271 The exception (or ``None`` if no exception was set) is returned only if
272 the future is done. If the future has been cancelled, raises
273 :exc:`CancelledError`. If the future isn't done yet, raises
274 :exc:`InvalidStateError`.
275
276 .. method:: add_done_callback(fn)
277
278 Add a callback to be run when the future becomes done.
279
280 The callback is called with a single argument - the future object. If the
281 future is already done when this is called, the callback is scheduled
Guido van Rossumf68afd82016-08-08 09:41:21 -0700282 with :meth:`~AbstractEventLoop.call_soon`.
Victor Stinner99c2ab42013-12-03 19:17:25 +0100283
Victor Stinner8464c242014-11-28 13:15:41 +0100284 :ref:`Use functools.partial to pass parameters to the callback
285 <asyncio-pass-keywords>`. For example,
286 ``fut.add_done_callback(functools.partial(print, "Future:",
287 flush=True))`` will call ``print("Future:", fut, flush=True)``.
288
Victor Stinner99c2ab42013-12-03 19:17:25 +0100289 .. method:: remove_done_callback(fn)
290
291 Remove all instances of a callback from the "call when done" list.
292
293 Returns the number of callbacks removed.
294
295 .. method:: set_result(result)
296
297 Mark the future done and set its result.
298
299 If the future is already done when this method is called, raises
300 :exc:`InvalidStateError`.
301
302 .. method:: set_exception(exception)
303
304 Mark the future done and set an exception.
305
306 If the future is already done when this method is called, raises
307 :exc:`InvalidStateError`.
308
Yury Selivanovca9b36c2017-12-23 15:04:15 -0500309 .. method:: get_loop()
310
311 Return the event loop the future object is bound to.
312
313 .. versionadded:: 3.7
314
Victor Stinner99c2ab42013-12-03 19:17:25 +0100315
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100316Example: Future with run_until_complete()
317^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
318
Victor Stinner59759ff2014-01-16 19:30:21 +0100319Example combining a :class:`Future` and a :ref:`coroutine function
320<coroutine>`::
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100321
322 import asyncio
323
Berker Peksagf5928672017-02-07 11:27:09 +0300324 async def slow_operation(future):
325 await asyncio.sleep(1)
Victor Stinner04e05da2014-02-17 10:54:30 +0100326 future.set_result('Future is done!')
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100327
328 loop = asyncio.get_event_loop()
329 future = asyncio.Future()
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400330 asyncio.ensure_future(slow_operation(future))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100331 loop.run_until_complete(future)
332 print(future.result())
Victor Stinnerf40c6632014-01-28 23:32:40 +0100333 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100334
Terry Jan Reedyc935a952014-07-24 02:33:14 -0400335The coroutine function is responsible for the computation (which takes 1 second)
Victor Stinner59759ff2014-01-16 19:30:21 +0100336and it stores the result into the future. The
Guido van Rossumf68afd82016-08-08 09:41:21 -0700337:meth:`~AbstractEventLoop.run_until_complete` method waits for the completion of
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100338the future.
339
340.. note::
Guido van Rossumf68afd82016-08-08 09:41:21 -0700341 The :meth:`~AbstractEventLoop.run_until_complete` method uses internally the
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100342 :meth:`~Future.add_done_callback` method to be notified when the future is
343 done.
344
345
346Example: Future with run_forever()
347^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
348
349The previous example can be written differently using the
350:meth:`Future.add_done_callback` method to describe explicitly the control
351flow::
352
353 import asyncio
354
Berker Peksagf5928672017-02-07 11:27:09 +0300355 async def slow_operation(future):
356 await asyncio.sleep(1)
Victor Stinner04e05da2014-02-17 10:54:30 +0100357 future.set_result('Future is done!')
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100358
359 def got_result(future):
360 print(future.result())
361 loop.stop()
362
363 loop = asyncio.get_event_loop()
364 future = asyncio.Future()
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400365 asyncio.ensure_future(slow_operation(future))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100366 future.add_done_callback(got_result)
Victor Stinner04e05da2014-02-17 10:54:30 +0100367 try:
368 loop.run_forever()
369 finally:
370 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100371
Victor Stinner039f7032014-12-02 17:52:45 +0100372In this example, the future is used to link ``slow_operation()`` to
373``got_result()``: when ``slow_operation()`` is done, ``got_result()`` is called
374with the result.
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100375
376
Victor Stinnerea3183f2013-12-03 01:08:00 +0100377Task
378----
379
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200380.. function:: create_task(coro)
381
382 Wrap a :ref:`coroutine <coroutine>` *coro* into a task and schedule
383 its execution. Return the task object.
384
385 The task is executed in :func:`get_running_loop` context,
386 :exc:`RuntimeError` is raised if there is no running loop in
387 current thread.
388
389 .. versionadded:: 3.7
390
Victor Stinnerea3183f2013-12-03 01:08:00 +0100391.. class:: Task(coro, \*, loop=None)
392
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200393 A unit for concurrent running of :ref:`coroutines <coroutine>`,
394 subclass of :class:`Future`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200395
R David Murray22dd8332014-09-24 11:09:09 -0400396 A task is responsible for executing a coroutine object in an event loop. If
Victor Stinner530ef2f2014-07-08 12:39:10 +0200397 the wrapped coroutine yields from a future, the task suspends the execution
Berker Peksag002b0a72016-10-04 20:45:47 +0300398 of the wrapped coroutine and waits for the completion of the future. When
Victor Stinner530ef2f2014-07-08 12:39:10 +0200399 the future is done, the execution of the wrapped coroutine restarts with the
400 result or the exception of the future.
401
402 Event loops use cooperative scheduling: an event loop only runs one task at
R David Murray22dd8332014-09-24 11:09:09 -0400403 a time. Other tasks may run in parallel if other event loops are
Victor Stinner530ef2f2014-07-08 12:39:10 +0200404 running in different threads. While a task waits for the completion of a
405 future, the event loop executes a new task.
406
luzpaza5293b42017-11-05 07:37:50 -0600407 The cancellation of a task is different from the cancellation of a
Andrew Svetlovf1240162016-01-11 14:40:35 +0200408 future. Calling :meth:`cancel` will throw a
409 :exc:`~concurrent.futures.CancelledError` to the wrapped
410 coroutine. :meth:`~Future.cancelled` only returns ``True`` if the
Victor Stinner530ef2f2014-07-08 12:39:10 +0200411 wrapped coroutine did not catch the
412 :exc:`~concurrent.futures.CancelledError` exception, or raised a
413 :exc:`~concurrent.futures.CancelledError` exception.
414
415 If a pending task is destroyed, the execution of its wrapped :ref:`coroutine
416 <coroutine>` did not complete. It is probably a bug and a warning is
417 logged: see :ref:`Pending task destroyed <asyncio-pending-task-destroyed>`.
418
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200419 Don't directly create :class:`Task` instances: use the :func:`create_task`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700420 function or the :meth:`AbstractEventLoop.create_task` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100421
Victor Stinner83704962015-02-25 14:24:15 +0100422 This class is :ref:`not thread safe <asyncio-multithreading>`.
423
Victor Stinnerea3183f2013-12-03 01:08:00 +0100424 .. classmethod:: all_tasks(loop=None)
425
426 Return a set of all tasks for an event loop.
427
428 By default all tasks for the current event loop are returned.
429
Victor Stinner742520b2013-12-10 12:14:50 +0100430 .. classmethod:: current_task(loop=None)
431
432 Return the currently running task in an event loop or ``None``.
433
434 By default the current task for the current event loop is returned.
435
436 ``None`` is returned when called not in the context of a :class:`Task`.
437
Victor Stinner8d213572014-06-02 23:06:46 +0200438 .. method:: cancel()
439
R David Murray22dd8332014-09-24 11:09:09 -0400440 Request that this task cancel itself.
Victor Stinner8d213572014-06-02 23:06:46 +0200441
442 This arranges for a :exc:`~concurrent.futures.CancelledError` to be
443 thrown into the wrapped coroutine on the next cycle through the event
444 loop. The coroutine then has a chance to clean up or even deny the
445 request using try/except/finally.
446
R David Murray22dd8332014-09-24 11:09:09 -0400447 Unlike :meth:`Future.cancel`, this does not guarantee that the task
Victor Stinner8d213572014-06-02 23:06:46 +0200448 will be cancelled: the exception might be caught and acted upon, delaying
R David Murray22dd8332014-09-24 11:09:09 -0400449 cancellation of the task or preventing cancellation completely. The task
450 may also return a value or raise a different exception.
Victor Stinner8d213572014-06-02 23:06:46 +0200451
452 Immediately after this method is called, :meth:`~Future.cancelled` will
453 not return ``True`` (unless the task was already cancelled). A task will
454 be marked as cancelled when the wrapped coroutine terminates with a
455 :exc:`~concurrent.futures.CancelledError` exception (even if
456 :meth:`cancel` was not called).
457
458 .. method:: get_stack(\*, limit=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100459
460 Return the list of stack frames for this task's coroutine.
461
Andrew Svetlovf1240162016-01-11 14:40:35 +0200462 If the coroutine is not done, this returns the stack where it is
463 suspended. If the coroutine has completed successfully or was
464 cancelled, this returns an empty list. If the coroutine was
465 terminated by an exception, this returns the list of traceback
466 frames.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100467
468 The frames are always ordered from oldest to newest.
469
Brian Curtina1afeec2014-02-08 18:36:14 -0600470 The optional limit gives the maximum number of frames to return; by
Victor Stinnerea3183f2013-12-03 01:08:00 +0100471 default all available frames are returned. Its meaning differs depending
472 on whether a stack or a traceback is returned: the newest frames of a
473 stack are returned, but the oldest frames of a traceback are returned.
474 (This matches the behavior of the traceback module.)
475
476 For reasons beyond our control, only one stack frame is returned for a
477 suspended coroutine.
478
479 .. method:: print_stack(\*, limit=None, file=None)
480
481 Print the stack or traceback for this task's coroutine.
482
483 This produces output similar to that of the traceback module, for the
484 frames retrieved by get_stack(). The limit argument is passed to
485 get_stack(). The file argument is an I/O stream to which the output
R David Murray22dd8332014-09-24 11:09:09 -0400486 is written; by default output is written to sys.stderr.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100487
488
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100489Example: Parallel execution of tasks
490^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
491
492Example executing 3 tasks (A, B, C) in parallel::
493
494 import asyncio
495
Berker Peksagd5adb632017-02-01 22:37:16 +0300496 async def factorial(name, number):
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100497 f = 1
Victor Stinner34f29462013-12-10 02:51:05 +0100498 for i in range(2, number+1):
499 print("Task %s: Compute factorial(%s)..." % (name, i))
Berker Peksagd5adb632017-02-01 22:37:16 +0300500 await asyncio.sleep(1)
Victor Stinner34f29462013-12-10 02:51:05 +0100501 f *= i
502 print("Task %s: factorial(%s) = %s" % (name, number, f))
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100503
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100504 loop = asyncio.get_event_loop()
Berker Peksagd5adb632017-02-01 22:37:16 +0300505 loop.run_until_complete(asyncio.gather(
506 factorial("A", 2),
507 factorial("B", 3),
508 factorial("C", 4),
509 ))
Victor Stinnerf40c6632014-01-28 23:32:40 +0100510 loop.close()
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100511
512Output::
513
Victor Stinner34f29462013-12-10 02:51:05 +0100514 Task A: Compute factorial(2)...
515 Task B: Compute factorial(2)...
516 Task C: Compute factorial(2)...
517 Task A: factorial(2) = 2
518 Task B: Compute factorial(3)...
519 Task C: Compute factorial(3)...
520 Task B: factorial(3) = 6
521 Task C: Compute factorial(4)...
522 Task C: factorial(4) = 24
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100523
Victor Stinner34f29462013-12-10 02:51:05 +0100524A task is automatically scheduled for execution when it is created. The event
Victor Stinnerb69d62d2013-12-10 02:09:46 +0100525loop stops when all tasks are done.
526
527
Victor Stinnerea3183f2013-12-03 01:08:00 +0100528Task functions
529--------------
530
Eli Bendersky029981b2014-01-20 07:02:22 -0800531.. note::
532
Martin Panterc04fb562016-02-10 05:44:01 +0000533 In the functions below, the optional *loop* argument allows explicitly setting
Eli Bendersky029981b2014-01-20 07:02:22 -0800534 the event loop object used by the underlying task or coroutine. If it's
535 not provided, the default event loop is used.
536
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200537
Andrew Svetlovb21505e2018-03-12 20:50:50 +0200538.. function:: current_task(loop=None)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200539
540 Return the current running :class:`Task` instance or ``None``, if
541 no task is running.
542
543 If *loop* is ``None`` :func:`get_running_loop` is used to get
544 the current loop.
545
546 .. versionadded:: 3.7
547
548
Andrew Svetlovb21505e2018-03-12 20:50:50 +0200549.. function:: all_tasks(loop=None)
Andrew Svetlov44d1a592017-12-16 21:58:38 +0200550
551 Return a set of :class:`Task` objects created for the loop.
552
553 If *loop* is ``None`` :func:`get_event_loop` is used for getting
554 current loop.
555
556 .. versionadded:: 3.7
557
558
Victor Stinner99c2ab42013-12-03 19:17:25 +0100559.. function:: as_completed(fs, \*, loop=None, timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100560
Victor Stinner99c2ab42013-12-03 19:17:25 +0100561 Return an iterator whose values, when waited for, are :class:`Future`
562 instances.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100563
Victor Stinner28d0ae482014-05-29 00:04:57 +0200564 Raises :exc:`asyncio.TimeoutError` if the timeout occurs before all Futures
565 are done.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100566
567 Example::
568
569 for f in as_completed(fs):
Andrew Svetlov88743422017-12-11 17:35:49 +0200570 result = await f # The 'await' may raise
Victor Stinnerea3183f2013-12-03 01:08:00 +0100571 # Use result
572
573 .. note::
574
575 The futures ``f`` are not necessarily members of fs.
576
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400577.. function:: ensure_future(coro_or_future, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100578
Victor Stinner980dd842014-10-12 21:36:17 +0200579 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
580 a future. Return a :class:`Task` object.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100581
Victor Stinner99c2ab42013-12-03 19:17:25 +0100582 If the argument is a :class:`Future`, it is returned directly.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100583
Yury Selivanovd7e19bb2015-05-11 16:33:41 -0400584 .. versionadded:: 3.4.4
585
Yury Selivanove319ab02015-12-15 00:45:24 -0500586 .. versionchanged:: 3.5.1
587 The function accepts any :term:`awaitable` object.
588
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200589 .. note::
590
591 :func:`create_task` (added in Python 3.7) is the preferable way
592 for spawning new tasks.
593
Victor Stinner337e03f2014-08-11 01:11:13 +0200594 .. seealso::
595
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200596 The :func:`create_task` function and
597 :meth:`AbstractEventLoop.create_task` method.
Victor Stinner337e03f2014-08-11 01:11:13 +0200598
adisbladis824f6872017-06-09 14:28:59 +0800599.. function:: wrap_future(future, \*, loop=None)
600
601 Wrap a :class:`concurrent.futures.Future` object in a :class:`Future`
602 object.
603
Victor Stinner99c2ab42013-12-03 19:17:25 +0100604.. function:: gather(\*coros_or_futures, loop=None, return_exceptions=False)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100605
Victor Stinner59759ff2014-01-16 19:30:21 +0100606 Return a future aggregating results from the given coroutine objects or
607 futures.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100608
609 All futures must share the same event loop. If all the tasks are done
610 successfully, the returned future's result is the list of results (in the
611 order of the original sequence, not necessarily the order of results
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300612 arrival). If *return_exceptions* is true, exceptions in the tasks are
Victor Stinnerea3183f2013-12-03 01:08:00 +0100613 treated the same as successful results, and gathered in the result list;
614 otherwise, the first raised exception will be immediately propagated to the
615 returned future.
616
617 Cancellation: if the outer Future is cancelled, all children (that have not
618 completed yet) are also cancelled. If any child is cancelled, this is
619 treated as if it raised :exc:`~concurrent.futures.CancelledError` -- the
620 outer Future is *not* cancelled in this case. (This is to prevent the
621 cancellation of one child to cause other children to be cancelled.)
622
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100623.. function:: iscoroutine(obj)
624
Yury Selivanov66f88282015-06-24 11:04:15 -0400625 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`,
626 which may be based on a generator or an :keyword:`async def` coroutine.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100627
Yury Selivanov66f88282015-06-24 11:04:15 -0400628.. function:: iscoroutinefunction(func)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100629
Yury Selivanov66f88282015-06-24 11:04:15 -0400630 Return ``True`` if *func* is determined to be a :ref:`coroutine function
631 <coroutine>`, which may be a decorated generator function or an
632 :keyword:`async def` function.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100633
Andrew Svetlovf1240162016-01-11 14:40:35 +0200634.. function:: run_coroutine_threadsafe(coro, loop)
635
636 Submit a :ref:`coroutine object <coroutine>` to a given event loop.
637
638 Return a :class:`concurrent.futures.Future` to access the result.
639
640 This function is meant to be called from a different thread than the one
641 where the event loop is running. Usage::
642
643 # Create a coroutine
644 coro = asyncio.sleep(1, result=3)
645 # Submit the coroutine to a given loop
646 future = asyncio.run_coroutine_threadsafe(coro, loop)
647 # Wait for the result with an optional timeout argument
648 assert future.result(timeout) == 3
649
650 If an exception is raised in the coroutine, the returned future will be
651 notified. It can also be used to cancel the task in the event loop::
652
653 try:
654 result = future.result(timeout)
655 except asyncio.TimeoutError:
656 print('The coroutine took too long, cancelling the task...')
657 future.cancel()
658 except Exception as exc:
659 print('The coroutine raised an exception: {!r}'.format(exc))
660 else:
661 print('The coroutine returned: {!r}'.format(result))
662
663 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
664 section of the documentation.
665
666 .. note::
667
Andrew Svetlov3af81f22016-01-11 14:45:25 +0200668 Unlike other functions from the module,
669 :func:`run_coroutine_threadsafe` requires the *loop* argument to
Zachary Waref9aff922016-06-01 00:01:10 -0500670 be passed explicitly.
Andrew Svetlovf1240162016-01-11 14:40:35 +0200671
Andrew Svetlovea471342016-01-11 15:41:43 +0200672 .. versionadded:: 3.5.1
Andrew Svetlovf1240162016-01-11 14:40:35 +0200673
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100674.. coroutinefunction:: sleep(delay, result=None, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100675
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500676 Create a :ref:`coroutine <coroutine>` that completes after a given
Eli Bendersky2d26af82014-01-20 06:59:23 -0800677 time (in seconds). If *result* is provided, it is produced to the caller
678 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100679
Victor Stinner45b27ed2014-02-01 02:36:43 +0100680 The resolution of the sleep depends on the :ref:`granularity of the event
681 loop <asyncio-delayed-calls>`.
682
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100683 This function is a :ref:`coroutine <coroutine>`.
684
Joongi Kim13cfd572018-03-04 01:43:54 +0900685.. coroutinefunction:: shield(arg, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100686
687 Wait for a future, shielding it from cancellation.
688
689 The statement::
690
Andrew Svetlov88743422017-12-11 17:35:49 +0200691 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100692
693 is exactly equivalent to the statement::
694
Andrew Svetlov88743422017-12-11 17:35:49 +0200695 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100696
697 *except* that if the coroutine containing it is cancelled, the task running
698 in ``something()`` is not cancelled. From the point of view of
699 ``something()``, the cancellation did not happen. But its caller is still
700 cancelled, so the yield-from expression still raises
701 :exc:`~concurrent.futures.CancelledError`. Note: If ``something()`` is
702 cancelled by other means this will still cancel ``shield()``.
703
704 If you want to completely ignore cancellation (not recommended) you can
705 combine ``shield()`` with a try/except clause, as follows::
706
707 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200708 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100709 except CancelledError:
710 res = None
711
Yury Selivanov950204d2016-05-16 16:23:00 -0400712
Andrew Svetlovf1240162016-01-11 14:40:35 +0200713.. coroutinefunction:: wait(futures, \*, loop=None, timeout=None,\
714 return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100715
Victor Stinner59759ff2014-01-16 19:30:21 +0100716 Wait for the Futures and coroutine objects given by the sequence *futures*
717 to complete. Coroutines will be wrapped in Tasks. Returns two sets of
Victor Stinner99c2ab42013-12-03 19:17:25 +0100718 :class:`Future`: (done, pending).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100719
Victor Stinnerdb74d982014-06-10 11:16:05 +0200720 The sequence *futures* must not be empty.
721
Victor Stinnerea3183f2013-12-03 01:08:00 +0100722 *timeout* can be used to control the maximum number of seconds to wait before
723 returning. *timeout* can be an int or float. If *timeout* is not specified
724 or ``None``, there is no limit to the wait time.
725
726 *return_when* indicates when this function should return. It must be one of
Victor Stinner933a8c82013-12-03 01:59:38 +0100727 the following constants of the :mod:`concurrent.futures` module:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100728
729 .. tabularcolumns:: |l|L|
730
731 +-----------------------------+----------------------------------------+
732 | Constant | Description |
733 +=============================+========================================+
734 | :const:`FIRST_COMPLETED` | The function will return when any |
735 | | future finishes or is cancelled. |
736 +-----------------------------+----------------------------------------+
737 | :const:`FIRST_EXCEPTION` | The function will return when any |
738 | | future finishes by raising an |
739 | | exception. If no future raises an |
740 | | exception then it is equivalent to |
741 | | :const:`ALL_COMPLETED`. |
742 +-----------------------------+----------------------------------------+
743 | :const:`ALL_COMPLETED` | The function will return when all |
744 | | futures finish or are cancelled. |
745 +-----------------------------+----------------------------------------+
746
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500747 This function is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100748
749 Usage::
750
Andrew Svetlov88743422017-12-11 17:35:49 +0200751 done, pending = await asyncio.wait(fs)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100752
753 .. note::
754
Victor Stinner28d0ae482014-05-29 00:04:57 +0200755 This does not raise :exc:`asyncio.TimeoutError`! Futures that aren't done
756 when the timeout occurs are returned in the second set.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100757
Victor Stinner3e09e322013-12-03 01:22:06 +0100758
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100759.. coroutinefunction:: wait_for(fut, timeout, \*, loop=None)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100760
761 Wait for the single :class:`Future` or :ref:`coroutine object <coroutine>`
Victor Stinner530ef2f2014-07-08 12:39:10 +0200762 to complete with timeout. If *timeout* is ``None``, block until the future
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100763 completes.
764
Victor Stinner337e03f2014-08-11 01:11:13 +0200765 Coroutine will be wrapped in :class:`Task`.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100766
767 Returns result of the Future or coroutine. When a timeout occurs, it
Victor Stinner28d0ae482014-05-29 00:04:57 +0200768 cancels the task and raises :exc:`asyncio.TimeoutError`. To avoid the task
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100769 cancellation, wrap it in :func:`shield`.
770
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200771 If the wait is cancelled, the future *fut* is also cancelled.
772
Victor Stinner530ef2f2014-07-08 12:39:10 +0200773 This function is a :ref:`coroutine <coroutine>`, usage::
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500774
Andrew Svetlov88743422017-12-11 17:35:49 +0200775 result = await asyncio.wait_for(fut, 60.0)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100776
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200777 .. versionchanged:: 3.4.3
778 If the wait is cancelled, the future *fut* is now also cancelled.