blob: 45e58437e0366db8f6264465cf12bb93f1e56833 [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Yury Selivanov3faaa882018-09-14 13:32:07 -07003
4====================
5Coroutines and Tasks
Victor Stinnerea3183f2013-12-03 01:08:00 +01006====================
7
Yury Selivanov3faaa882018-09-14 13:32:07 -07008This section outlines high-level asyncio APIs to work with coroutines
9and Tasks.
lf627d2c82017-07-25 17:03:51 -060010
Yury Selivanov3faaa882018-09-14 13:32:07 -070011.. contents::
12 :depth: 1
13 :local:
14
lf627d2c82017-07-25 17:03:51 -060015
Victor Stinnerea3183f2013-12-03 01:08:00 +010016.. _coroutine:
17
18Coroutines
Yury Selivanov3faaa882018-09-14 13:32:07 -070019==========
Victor Stinnerea3183f2013-12-03 01:08:00 +010020
Kyle Stanleyf9000642019-10-10 19:18:46 -040021:term:`Coroutines <coroutine>` declared with the async/await syntax is the
22preferred way of writing asyncio applications. For example, the following
23snippet of code (requires Python 3.7+) prints "hello", waits 1 second,
Yury Selivanovb042cf12018-09-18 02:47:54 -040024and then prints "world"::
Victor Stinnerea3183f2013-12-03 01:08:00 +010025
Yury Selivanov3faaa882018-09-14 13:32:07 -070026 >>> import asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +010027
Yury Selivanov3faaa882018-09-14 13:32:07 -070028 >>> async def main():
29 ... print('hello')
30 ... await asyncio.sleep(1)
31 ... print('world')
Victor Stinnerea3183f2013-12-03 01:08:00 +010032
Yury Selivanov3faaa882018-09-14 13:32:07 -070033 >>> asyncio.run(main())
34 hello
35 world
Victor Stinnerea3183f2013-12-03 01:08:00 +010036
Yury Selivanov3faaa882018-09-14 13:32:07 -070037Note that simply calling a coroutine will not schedule it to
38be executed::
Victor Stinnerea3183f2013-12-03 01:08:00 +010039
Yury Selivanov3faaa882018-09-14 13:32:07 -070040 >>> main()
41 <coroutine object main at 0x1053bb7c8>
Victor Stinnerea3183f2013-12-03 01:08:00 +010042
Boštjan Mejak1d5bdef2019-05-19 11:01:36 +020043To actually run a coroutine, asyncio provides three main mechanisms:
Victor Stinnerea3183f2013-12-03 01:08:00 +010044
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040045* The :func:`asyncio.run` function to run the top-level
Yury Selivanov3faaa882018-09-14 13:32:07 -070046 entry point "main()" function (see the above example.)
Victor Stinnerea3183f2013-12-03 01:08:00 +010047
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040048* Awaiting on a coroutine. The following snippet of code will
Yury Selivanov3faaa882018-09-14 13:32:07 -070049 print "hello" after waiting for 1 second, and then print "world"
50 after waiting for *another* 2 seconds::
Victor Stinnerea3183f2013-12-03 01:08:00 +010051
Yury Selivanov3faaa882018-09-14 13:32:07 -070052 import asyncio
53 import time
Victor Stinnerea3183f2013-12-03 01:08:00 +010054
Yury Selivanov3faaa882018-09-14 13:32:07 -070055 async def say_after(delay, what):
56 await asyncio.sleep(delay)
57 print(what)
58
59 async def main():
Mariatta9f43fbb2018-10-24 15:37:12 -070060 print(f"started at {time.strftime('%X')}")
Yury Selivanov3faaa882018-09-14 13:32:07 -070061
62 await say_after(1, 'hello')
63 await say_after(2, 'world')
64
Mariatta9f43fbb2018-10-24 15:37:12 -070065 print(f"finished at {time.strftime('%X')}")
Yury Selivanov3faaa882018-09-14 13:32:07 -070066
67 asyncio.run(main())
68
69 Expected output::
70
71 started at 17:13:52
72 hello
73 world
74 finished at 17:13:55
75
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040076* The :func:`asyncio.create_task` function to run coroutines
Yury Selivanov3faaa882018-09-14 13:32:07 -070077 concurrently as asyncio :class:`Tasks <Task>`.
78
Danny Hermes7bfbda42018-09-17 21:49:21 -070079 Let's modify the above example and run two ``say_after`` coroutines
Yury Selivanov3faaa882018-09-14 13:32:07 -070080 *concurrently*::
81
82 async def main():
83 task1 = asyncio.create_task(
84 say_after(1, 'hello'))
85
86 task2 = asyncio.create_task(
87 say_after(2, 'world'))
88
Mariatta9f43fbb2018-10-24 15:37:12 -070089 print(f"started at {time.strftime('%X')}")
Yury Selivanov3faaa882018-09-14 13:32:07 -070090
91 # Wait until both tasks are completed (should take
92 # around 2 seconds.)
93 await task1
94 await task2
95
Mariatta9f43fbb2018-10-24 15:37:12 -070096 print(f"finished at {time.strftime('%X')}")
Yury Selivanov3faaa882018-09-14 13:32:07 -070097
98 Note that expected output now shows that the snippet runs
99 1 second faster than before::
100
101 started at 17:14:32
102 hello
103 world
104 finished at 17:14:34
105
Yury Selivanov47150392018-09-18 17:55:44 -0400106
107.. _asyncio-awaitables:
108
109Awaitables
110==========
111
Yury Selivanove247b462018-09-20 12:43:59 -0400112We say that an object is an **awaitable** object if it can be used
113in an :keyword:`await` expression. Many asyncio APIs are designed to
114accept awaitables.
115
116There are three main types of *awaitable* objects:
117**coroutines**, **Tasks**, and **Futures**.
Yury Selivanov47150392018-09-18 17:55:44 -0400118
119
Yury Selivanove247b462018-09-20 12:43:59 -0400120.. rubric:: Coroutines
Yury Selivanov47150392018-09-18 17:55:44 -0400121
Yury Selivanove247b462018-09-20 12:43:59 -0400122Python coroutines are *awaitables* and therefore can be awaited from
123other coroutines::
124
125 import asyncio
Yury Selivanov47150392018-09-18 17:55:44 -0400126
127 async def nested():
128 return 42
129
130 async def main():
Yury Selivanove247b462018-09-20 12:43:59 -0400131 # Nothing happens if we just call "nested()".
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400132 # A coroutine object is created but not awaited,
133 # so it *won't run at all*.
Yury Selivanove247b462018-09-20 12:43:59 -0400134 nested()
135
136 # Let's do it differently now and await it:
137 print(await nested()) # will print "42".
138
139 asyncio.run(main())
140
141.. important::
142
143 In this documentation the term "coroutine" can be used for
144 two closely related concepts:
145
146 * a *coroutine function*: an :keyword:`async def` function;
147
148 * a *coroutine object*: an object returned by calling a
149 *coroutine function*.
150
151asyncio also supports legacy :ref:`generator-based
152<asyncio_generator_based_coro>` coroutines.
153
154
155.. rubric:: Tasks
Yury Selivanov47150392018-09-18 17:55:44 -0400156
157*Tasks* are used to schedule coroutines *concurrently*.
Yury Selivanov47150392018-09-18 17:55:44 -0400158
Yury Selivanove247b462018-09-20 12:43:59 -0400159When a coroutine is wrapped into a *Task* with functions like
160:func:`asyncio.create_task` the coroutine is automatically
161scheduled to run soon::
Yury Selivanov3faaa882018-09-14 13:32:07 -0700162
Yury Selivanove247b462018-09-20 12:43:59 -0400163 import asyncio
Yury Selivanov3faaa882018-09-14 13:32:07 -0700164
Yury Selivanove247b462018-09-20 12:43:59 -0400165 async def nested():
166 return 42
167
168 async def main():
169 # Schedule nested() to run soon concurrently
170 # with "main()".
171 task = asyncio.create_task(nested())
172
173 # "task" can now be used to cancel "nested()", or
174 # can simply be awaited to wait until it is complete:
175 await task
176
177 asyncio.run(main())
Victor Stinner337e03f2014-08-11 01:11:13 +0200178
Victor Stinnerea3183f2013-12-03 01:08:00 +0100179
Yury Selivanov47150392018-09-18 17:55:44 -0400180.. rubric:: Futures
181
Yury Selivanove247b462018-09-20 12:43:59 -0400182A :class:`Future` is a special **low-level** awaitable object that
183represents an **eventual result** of an asynchronous operation.
Yury Selivanov47150392018-09-18 17:55:44 -0400184
Yury Selivanove247b462018-09-20 12:43:59 -0400185When a Future object is *awaited* it means that the coroutine will
186wait until the Future is resolved in some other place.
187
Yury Selivanov47150392018-09-18 17:55:44 -0400188Future objects in asyncio are needed to allow callback-based code
189to be used with async/await.
190
Yury Selivanove247b462018-09-20 12:43:59 -0400191Normally **there is no need** to create Future objects at the
Yury Selivanov47150392018-09-18 17:55:44 -0400192application level code.
193
194Future objects, sometimes exposed by libraries and some asyncio
Yury Selivanove247b462018-09-20 12:43:59 -0400195APIs, can be awaited::
Yury Selivanov47150392018-09-18 17:55:44 -0400196
197 async def main():
198 await function_that_returns_a_future_object()
199
200 # this is also valid:
201 await asyncio.gather(
202 function_that_returns_a_future_object(),
203 some_python_coroutine()
204 )
205
Yury Selivanove247b462018-09-20 12:43:59 -0400206A good example of a low-level function that returns a Future object
207is :meth:`loop.run_in_executor`.
208
Yury Selivanov47150392018-09-18 17:55:44 -0400209
Yury Selivanov3faaa882018-09-14 13:32:07 -0700210Running an asyncio Program
211==========================
Victor Stinnerea3183f2013-12-03 01:08:00 +0100212
Andre Delfinodcc997c2020-12-16 22:37:28 -0300213.. function:: run(coro, *, debug=False)
Yury Selivanov02a0a192017-12-14 09:42:21 -0500214
Kyle Stanleye4070132019-09-30 20:12:21 -0400215 Execute the :term:`coroutine` *coro* and return the result.
216
Yury Selivanov02a0a192017-12-14 09:42:21 -0500217 This function runs the passed coroutine, taking care of
Kyle Stanley9fdc64c2019-09-19 08:47:22 -0400218 managing the asyncio event loop, *finalizing asynchronous
219 generators*, and closing the threadpool.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500220
221 This function cannot be called when another asyncio event loop is
222 running in the same thread.
223
Yury Selivanov3faaa882018-09-14 13:32:07 -0700224 If *debug* is ``True``, the event loop will be run in debug mode.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500225
226 This function always creates a new event loop and closes it at
227 the end. It should be used as a main entry point for asyncio
228 programs, and should ideally only be called once.
229
Emmanuel Arias17deb162019-09-25 05:53:49 -0300230 Example::
231
232 async def main():
233 await asyncio.sleep(1)
234 print('hello')
235
236 asyncio.run(main())
237
Yury Selivanov02a0a192017-12-14 09:42:21 -0500238 .. versionadded:: 3.7
239
Kyle Stanley9fdc64c2019-09-19 08:47:22 -0400240 .. versionchanged:: 3.9
241 Updated to use :meth:`loop.shutdown_default_executor`.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500242
Kyle Stanleyf9000642019-10-10 19:18:46 -0400243 .. note::
244 The source code for ``asyncio.run()`` can be found in
245 :source:`Lib/asyncio/runners.py`.
246
Yury Selivanov3faaa882018-09-14 13:32:07 -0700247Creating Tasks
248==============
Victor Stinnerea3183f2013-12-03 01:08:00 +0100249
Andre Delfinodcc997c2020-12-16 22:37:28 -0300250.. function:: create_task(coro, *, name=None)
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200251
Yury Selivanove247b462018-09-20 12:43:59 -0400252 Wrap the *coro* :ref:`coroutine <coroutine>` into a :class:`Task`
253 and schedule its execution. Return the Task object.
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300254
255 If *name* is not ``None``, it is set as the name of the task using
256 :meth:`Task.set_name`.
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200257
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400258 The task is executed in the loop returned by :func:`get_running_loop`,
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200259 :exc:`RuntimeError` is raised if there is no running loop in
260 current thread.
261
Yury Selivanov47150392018-09-18 17:55:44 -0400262 This function has been **added in Python 3.7**. Prior to
263 Python 3.7, the low-level :func:`asyncio.ensure_future` function
264 can be used instead::
265
266 async def coro():
267 ...
268
269 # In Python 3.7+
270 task = asyncio.create_task(coro())
271 ...
272
273 # This works in all Python versions but is less readable
274 task = asyncio.ensure_future(coro())
275 ...
276
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200277 .. versionadded:: 3.7
278
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300279 .. versionchanged:: 3.8
280 Added the ``name`` parameter.
281
Victor Stinnerea3183f2013-12-03 01:08:00 +0100282
Yury Selivanov3faaa882018-09-14 13:32:07 -0700283Sleeping
284========
Andrew Svetlovf1240162016-01-11 14:40:35 +0200285
Yurii Karabas86150d32020-11-29 14:50:57 +0200286.. coroutinefunction:: sleep(delay, result=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100287
Yury Selivanov3faaa882018-09-14 13:32:07 -0700288 Block for *delay* seconds.
289
290 If *result* is provided, it is returned to the caller
Eli Bendersky2d26af82014-01-20 06:59:23 -0800291 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100292
Hrvoje Nikšićcd602b82018-10-01 12:09:38 +0200293 ``sleep()`` always suspends the current task, allowing other tasks
294 to run.
295
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700296 .. _asyncio_example_sleep:
Victor Stinner45b27ed2014-02-01 02:36:43 +0100297
Yury Selivanov3faaa882018-09-14 13:32:07 -0700298 Example of coroutine displaying the current date every second
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400299 for 5 seconds::
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100300
Yury Selivanov3faaa882018-09-14 13:32:07 -0700301 import asyncio
302 import datetime
Victor Stinnerea3183f2013-12-03 01:08:00 +0100303
Yury Selivanov3faaa882018-09-14 13:32:07 -0700304 async def display_date():
305 loop = asyncio.get_running_loop()
306 end_time = loop.time() + 5.0
307 while True:
308 print(datetime.datetime.now())
309 if (loop.time() + 1.0) >= end_time:
310 break
311 await asyncio.sleep(1)
312
313 asyncio.run(display_date())
314
315
316Running Tasks Concurrently
317==========================
318
Andre Delfinodcc997c2020-12-16 22:37:28 -0300319.. awaitablefunction:: gather(*aws, return_exceptions=False)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700320
Yury Selivanove247b462018-09-20 12:43:59 -0400321 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400322 sequence *concurrently*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700323
Yury Selivanove247b462018-09-20 12:43:59 -0400324 If any awaitable in *aws* is a coroutine, it is automatically
Yury Selivanov47150392018-09-18 17:55:44 -0400325 scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700326
Yury Selivanov47150392018-09-18 17:55:44 -0400327 If all awaitables are completed successfully, the result is an
328 aggregate list of returned values. The order of result values
Yury Selivanove247b462018-09-20 12:43:59 -0400329 corresponds to the order of awaitables in *aws*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700330
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400331 If *return_exceptions* is ``False`` (default), the first
332 raised exception is immediately propagated to the task that
333 awaits on ``gather()``. Other awaitables in the *aws* sequence
334 **won't be cancelled** and will continue to run.
335
Yury Selivanov47150392018-09-18 17:55:44 -0400336 If *return_exceptions* is ``True``, exceptions are treated the
337 same as successful results, and aggregated in the result list.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700338
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400339 If ``gather()`` is *cancelled*, all submitted awaitables
Yury Selivanov3faaa882018-09-14 13:32:07 -0700340 (that have not completed yet) are also *cancelled*.
341
Yury Selivanove247b462018-09-20 12:43:59 -0400342 If any Task or Future from the *aws* sequence is *cancelled*, it is
Yury Selivanov47150392018-09-18 17:55:44 -0400343 treated as if it raised :exc:`CancelledError` -- the ``gather()``
344 call is **not** cancelled in this case. This is to prevent the
345 cancellation of one submitted Task/Future to cause other
346 Tasks/Futures to be cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700347
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700348 .. _asyncio_example_gather:
349
Yury Selivanov3faaa882018-09-14 13:32:07 -0700350 Example::
351
352 import asyncio
353
354 async def factorial(name, number):
355 f = 1
356 for i in range(2, number + 1):
357 print(f"Task {name}: Compute factorial({i})...")
358 await asyncio.sleep(1)
359 f *= i
360 print(f"Task {name}: factorial({number}) = {f}")
361
362 async def main():
Yury Selivanov47150392018-09-18 17:55:44 -0400363 # Schedule three calls *concurrently*:
Yury Selivanov3faaa882018-09-14 13:32:07 -0700364 await asyncio.gather(
365 factorial("A", 2),
366 factorial("B", 3),
367 factorial("C", 4),
Miguel Ángel García9c53fa62018-09-18 08:01:26 +0200368 )
Yury Selivanov3faaa882018-09-14 13:32:07 -0700369
370 asyncio.run(main())
371
372 # Expected output:
373 #
374 # Task A: Compute factorial(2)...
375 # Task B: Compute factorial(2)...
376 # Task C: Compute factorial(2)...
377 # Task A: factorial(2) = 2
378 # Task B: Compute factorial(3)...
379 # Task C: Compute factorial(3)...
380 # Task B: factorial(3) = 6
381 # Task C: Compute factorial(4)...
382 # Task C: factorial(4) = 24
383
Vinay Sharmad42528a2020-07-20 14:12:57 +0530384 .. note::
385 If *return_exceptions* is False, cancelling gather() after it
386 has been marked done won't cancel any submitted awaitables.
387 For instance, gather can be marked done after propagating an
388 exception to the caller, therefore, calling ``gather.cancel()``
389 after catching an exception (raised by one of the awaitables) from
390 gather won't cancel any other awaitables.
391
Yury Selivanov47150392018-09-18 17:55:44 -0400392 .. versionchanged:: 3.7
393 If the *gather* itself is cancelled, the cancellation is
394 propagated regardless of *return_exceptions*.
395
Yury Selivanov3faaa882018-09-14 13:32:07 -0700396
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400397Shielding From Cancellation
398===========================
Yury Selivanov3faaa882018-09-14 13:32:07 -0700399
Yurii Karabas86150d32020-11-29 14:50:57 +0200400.. awaitablefunction:: shield(aw)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700401
Yury Selivanov47150392018-09-18 17:55:44 -0400402 Protect an :ref:`awaitable object <asyncio-awaitables>`
403 from being :meth:`cancelled <Task.cancel>`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700404
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400405 If *aw* is a coroutine it is automatically scheduled as a Task.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100406
407 The statement::
408
Andrew Svetlov88743422017-12-11 17:35:49 +0200409 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100410
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400411 is equivalent to::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100412
Andrew Svetlov88743422017-12-11 17:35:49 +0200413 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100414
Yury Selivanov3faaa882018-09-14 13:32:07 -0700415 *except* that if the coroutine containing it is cancelled, the
416 Task running in ``something()`` is not cancelled. From the point
417 of view of ``something()``, the cancellation did not happen.
418 Although its caller is still cancelled, so the "await" expression
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400419 still raises a :exc:`CancelledError`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100420
Yury Selivanov3faaa882018-09-14 13:32:07 -0700421 If ``something()`` is cancelled by other means (i.e. from within
422 itself) that would also cancel ``shield()``.
423
424 If it is desired to completely ignore cancellation (not recommended)
425 the ``shield()`` function should be combined with a try/except
426 clause, as follows::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100427
428 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200429 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100430 except CancelledError:
431 res = None
432
Yury Selivanov950204d2016-05-16 16:23:00 -0400433
Yury Selivanov3faaa882018-09-14 13:32:07 -0700434Timeouts
435========
436
Yurii Karabas86150d32020-11-29 14:50:57 +0200437.. coroutinefunction:: wait_for(aw, timeout)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700438
Yury Selivanove247b462018-09-20 12:43:59 -0400439 Wait for the *aw* :ref:`awaitable <asyncio-awaitables>`
Yury Selivanov47150392018-09-18 17:55:44 -0400440 to complete with a timeout.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700441
Yury Selivanove247b462018-09-20 12:43:59 -0400442 If *aw* is a coroutine it is automatically scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700443
444 *timeout* can either be ``None`` or a float or int number of seconds
445 to wait for. If *timeout* is ``None``, block until the future
446 completes.
447
448 If a timeout occurs, it cancels the task and raises
449 :exc:`asyncio.TimeoutError`.
450
Yury Selivanov47150392018-09-18 17:55:44 -0400451 To avoid the task :meth:`cancellation <Task.cancel>`,
452 wrap it in :func:`shield`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700453
454 The function will wait until the future is actually cancelled,
romasku382a5632020-05-15 23:12:05 +0300455 so the total wait time may exceed the *timeout*. If an exception
456 happens during cancellation, it is propagated.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700457
Yury Selivanove247b462018-09-20 12:43:59 -0400458 If the wait is cancelled, the future *aw* is also cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700459
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700460 .. _asyncio_example_waitfor:
461
Yury Selivanov3faaa882018-09-14 13:32:07 -0700462 Example::
463
464 async def eternity():
465 # Sleep for one hour
466 await asyncio.sleep(3600)
467 print('yay!')
468
469 async def main():
470 # Wait for at most 1 second
471 try:
472 await asyncio.wait_for(eternity(), timeout=1.0)
473 except asyncio.TimeoutError:
474 print('timeout!')
475
476 asyncio.run(main())
477
478 # Expected output:
479 #
480 # timeout!
481
482 .. versionchanged:: 3.7
Yury Selivanove247b462018-09-20 12:43:59 -0400483 When *aw* is cancelled due to a timeout, ``wait_for`` waits
484 for *aw* to be cancelled. Previously, it raised
Yury Selivanov3faaa882018-09-14 13:32:07 -0700485 :exc:`asyncio.TimeoutError` immediately.
486
487
488Waiting Primitives
489==================
490
Andre Delfinodcc997c2020-12-16 22:37:28 -0300491.. coroutinefunction:: wait(aws, *, timeout=None, return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100492
Yury Selivanove247b462018-09-20 12:43:59 -0400493 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Jakub Stasiak3d86d092020-11-02 11:56:35 +0100494 iterable concurrently and block until the condition specified
Yury Selivanov47150392018-09-18 17:55:44 -0400495 by *return_when*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100496
Jakub Stasiak3d86d092020-11-02 11:56:35 +0100497 The *aws* iterable must not be empty.
Joel Rosdahl9d746582020-05-04 23:56:00 +0200498
Yury Selivanov3faaa882018-09-14 13:32:07 -0700499 Returns two sets of Tasks/Futures: ``(done, pending)``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100500
Yury Selivanov996859a2018-09-25 14:51:21 -0400501 Usage::
502
503 done, pending = await asyncio.wait(aws)
504
Yury Selivanov3faaa882018-09-14 13:32:07 -0700505 *timeout* (a float or int), if specified, can be used to control
506 the maximum number of seconds to wait before returning.
507
508 Note that this function does not raise :exc:`asyncio.TimeoutError`.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400509 Futures or Tasks that aren't done when the timeout occurs are simply
Yury Selivanov3faaa882018-09-14 13:32:07 -0700510 returned in the second set.
511
512 *return_when* indicates when this function should return. It must
513 be one of the following constants:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100514
515 .. tabularcolumns:: |l|L|
516
517 +-----------------------------+----------------------------------------+
518 | Constant | Description |
519 +=============================+========================================+
520 | :const:`FIRST_COMPLETED` | The function will return when any |
521 | | future finishes or is cancelled. |
522 +-----------------------------+----------------------------------------+
523 | :const:`FIRST_EXCEPTION` | The function will return when any |
524 | | future finishes by raising an |
525 | | exception. If no future raises an |
526 | | exception then it is equivalent to |
527 | | :const:`ALL_COMPLETED`. |
528 +-----------------------------+----------------------------------------+
529 | :const:`ALL_COMPLETED` | The function will return when all |
530 | | futures finish or are cancelled. |
531 +-----------------------------+----------------------------------------+
532
Yury Selivanov3faaa882018-09-14 13:32:07 -0700533 Unlike :func:`~asyncio.wait_for`, ``wait()`` does not cancel the
534 futures when a timeout occurs.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100535
Andrew Svetlova4888792019-09-12 15:40:40 +0300536 .. deprecated:: 3.8
537
538 If any awaitable in *aws* is a coroutine, it is automatically
539 scheduled as a Task. Passing coroutines objects to
540 ``wait()`` directly is deprecated as it leads to
541 :ref:`confusing behavior <asyncio_example_wait_coroutine>`.
542
Yury Selivanov996859a2018-09-25 14:51:21 -0400543 .. _asyncio_example_wait_coroutine:
544 .. note::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100545
Yury Selivanov996859a2018-09-25 14:51:21 -0400546 ``wait()`` schedules coroutines as Tasks automatically and later
547 returns those implicitly created Task objects in ``(done, pending)``
548 sets. Therefore the following code won't work as expected::
549
550 async def foo():
551 return 42
552
553 coro = foo()
554 done, pending = await asyncio.wait({coro})
555
556 if coro in done:
557 # This branch will never be run!
558
559 Here is how the above snippet can be fixed::
560
561 async def foo():
562 return 42
563
564 task = asyncio.create_task(foo())
565 done, pending = await asyncio.wait({task})
566
567 if task in done:
568 # Everything will work as expected now.
569
jack1142de927692020-05-13 20:55:12 +0200570 .. deprecated-removed:: 3.8 3.11
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700571
Yury Selivanov996859a2018-09-25 14:51:21 -0400572 Passing coroutine objects to ``wait()`` directly is
573 deprecated.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100574
Victor Stinnerea3183f2013-12-03 01:08:00 +0100575
Andre Delfinodcc997c2020-12-16 22:37:28 -0300576.. function:: as_completed(aws, *, timeout=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700577
Yury Selivanove247b462018-09-20 12:43:59 -0400578 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Jakub Stasiak3d86d092020-11-02 11:56:35 +0100579 iterable concurrently. Return an iterator of coroutines.
Bar Harel13206b52020-05-24 02:14:31 +0300580 Each coroutine returned can be awaited to get the earliest next
Jakub Stasiak3d86d092020-11-02 11:56:35 +0100581 result from the iterable of the remaining awaitables.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700582
583 Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
584 all Futures are done.
585
586 Example::
587
Bar Harel13206b52020-05-24 02:14:31 +0300588 for coro in as_completed(aws):
589 earliest_result = await coro
Yury Selivanov3faaa882018-09-14 13:32:07 -0700590 # ...
Victor Stinnerea3183f2013-12-03 01:08:00 +0100591
Victor Stinner3e09e322013-12-03 01:22:06 +0100592
Kyle Stanleycc2bbc22020-05-18 23:03:28 -0400593Running in Threads
594==================
595
Andre Delfinodcc997c2020-12-16 22:37:28 -0300596.. coroutinefunction:: to_thread(func, /, *args, **kwargs)
Kyle Stanleycc2bbc22020-05-18 23:03:28 -0400597
598 Asynchronously run function *func* in a separate thread.
599
600 Any \*args and \*\*kwargs supplied for this function are directly passed
Jesús Cea989af252020-11-24 00:56:30 +0100601 to *func*. Also, the current :class:`contextvars.Context` is propagated,
Kyle Stanley0f562632020-05-21 01:20:43 -0400602 allowing context variables from the event loop thread to be accessed in the
603 separate thread.
Kyle Stanleycc2bbc22020-05-18 23:03:28 -0400604
Kyle Stanley2b201362020-05-31 03:07:04 -0400605 Return a coroutine that can be awaited to get the eventual result of *func*.
Kyle Stanleycc2bbc22020-05-18 23:03:28 -0400606
607 This coroutine function is primarily intended to be used for executing
608 IO-bound functions/methods that would otherwise block the event loop if
609 they were ran in the main thread. For example::
610
611 def blocking_io():
612 print(f"start blocking_io at {time.strftime('%X')}")
613 # Note that time.sleep() can be replaced with any blocking
614 # IO-bound operation, such as file operations.
615 time.sleep(1)
616 print(f"blocking_io complete at {time.strftime('%X')}")
617
618 async def main():
619 print(f"started main at {time.strftime('%X')}")
620
621 await asyncio.gather(
622 asyncio.to_thread(blocking_io),
623 asyncio.sleep(1))
624
625 print(f"finished main at {time.strftime('%X')}")
626
627
628 asyncio.run(main())
629
630 # Expected output:
631 #
632 # started main at 19:50:53
633 # start blocking_io at 19:50:53
634 # blocking_io complete at 19:50:54
635 # finished main at 19:50:54
636
637 Directly calling `blocking_io()` in any coroutine would block the event loop
638 for its duration, resulting in an additional 1 second of run time. Instead,
639 by using `asyncio.to_thread()`, we can run it in a separate thread without
640 blocking the event loop.
641
642 .. note::
643
644 Due to the :term:`GIL`, `asyncio.to_thread()` can typically only be used
645 to make IO-bound functions non-blocking. However, for extension modules
646 that release the GIL or alternative Python implementations that don't
647 have one, `asyncio.to_thread()` can also be used for CPU-bound functions.
648
Kyle Stanley0f562632020-05-21 01:20:43 -0400649 .. versionadded:: 3.9
650
Kyle Stanleycc2bbc22020-05-18 23:03:28 -0400651
Yury Selivanov3faaa882018-09-14 13:32:07 -0700652Scheduling From Other Threads
653=============================
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100654
Yury Selivanov3faaa882018-09-14 13:32:07 -0700655.. function:: run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100656
Yury Selivanov3faaa882018-09-14 13:32:07 -0700657 Submit a coroutine to the given event loop. Thread-safe.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100658
Yury Selivanov47150392018-09-18 17:55:44 -0400659 Return a :class:`concurrent.futures.Future` to wait for the result
660 from another OS thread.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100661
Yury Selivanov3faaa882018-09-14 13:32:07 -0700662 This function is meant to be called from a different OS thread
663 than the one where the event loop is running. Example::
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200664
Yury Selivanov3faaa882018-09-14 13:32:07 -0700665 # Create a coroutine
666 coro = asyncio.sleep(1, result=3)
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500667
Yury Selivanov3faaa882018-09-14 13:32:07 -0700668 # Submit the coroutine to a given loop
669 future = asyncio.run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100670
Yury Selivanov3faaa882018-09-14 13:32:07 -0700671 # 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
675 will be notified. It can also be used to cancel the task in
676 the event loop::
677
678 try:
679 result = future.result(timeout)
680 except asyncio.TimeoutError:
681 print('The coroutine took too long, cancelling the task...')
682 future.cancel()
683 except Exception as exc:
Mariatta9f43fbb2018-10-24 15:37:12 -0700684 print(f'The coroutine raised an exception: {exc!r}')
Yury Selivanov3faaa882018-09-14 13:32:07 -0700685 else:
Mariatta9f43fbb2018-10-24 15:37:12 -0700686 print(f'The coroutine returned: {result!r}')
Yury Selivanov3faaa882018-09-14 13:32:07 -0700687
688 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
689 section of the documentation.
690
Vaibhav Gupta3a810762018-12-26 20:17:17 +0530691 Unlike other asyncio functions this function requires the *loop*
Yury Selivanov3faaa882018-09-14 13:32:07 -0700692 argument to be passed explicitly.
693
694 .. versionadded:: 3.5.1
695
696
697Introspection
698=============
699
700
701.. function:: current_task(loop=None)
702
703 Return the currently running :class:`Task` instance, or ``None`` if
704 no task is running.
705
706 If *loop* is ``None`` :func:`get_running_loop` is used to get
707 the current loop.
708
709 .. versionadded:: 3.7
710
711
712.. function:: all_tasks(loop=None)
713
714 Return a set of not yet finished :class:`Task` objects run by
715 the loop.
716
717 If *loop* is ``None``, :func:`get_running_loop` is used for getting
718 current loop.
719
720 .. versionadded:: 3.7
721
722
723Task Object
724===========
725
Andre Delfinodcc997c2020-12-16 22:37:28 -0300726.. class:: Task(coro, *, loop=None, name=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700727
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400728 A :class:`Future-like <Future>` object that runs a Python
Yury Selivanov3faaa882018-09-14 13:32:07 -0700729 :ref:`coroutine <coroutine>`. Not thread-safe.
730
731 Tasks are used to run coroutines in event loops.
732 If a coroutine awaits on a Future, the Task suspends
733 the execution of the coroutine and waits for the completion
734 of the Future. When the Future is *done*, the execution of
735 the wrapped coroutine resumes.
736
737 Event loops use cooperative scheduling: an event loop runs
738 one Task at a time. While a Task awaits for the completion of a
739 Future, the event loop runs other Tasks, callbacks, or performs
740 IO operations.
741
742 Use the high-level :func:`asyncio.create_task` function to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400743 Tasks, or the low-level :meth:`loop.create_task` or
744 :func:`ensure_future` functions. Manual instantiation of Tasks
745 is discouraged.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700746
747 To cancel a running Task use the :meth:`cancel` method. Calling it
748 will cause the Task to throw a :exc:`CancelledError` exception into
749 the wrapped coroutine. If a coroutine is awaiting on a Future
750 object during cancellation, the Future object will be cancelled.
751
752 :meth:`cancelled` can be used to check if the Task was cancelled.
753 The method returns ``True`` if the wrapped coroutine did not
754 suppress the :exc:`CancelledError` exception and was actually
755 cancelled.
756
757 :class:`asyncio.Task` inherits from :class:`Future` all of its
758 APIs except :meth:`Future.set_result` and
759 :meth:`Future.set_exception`.
760
761 Tasks support the :mod:`contextvars` module. When a Task
762 is created it copies the current context and later runs its
763 coroutine in the copied context.
Elvis Pranskevichuse2b340a2018-05-29 17:31:01 -0400764
765 .. versionchanged:: 3.7
Yury Selivanov3faaa882018-09-14 13:32:07 -0700766 Added support for the :mod:`contextvars` module.
767
768 .. versionchanged:: 3.8
769 Added the ``name`` parameter.
770
Andrew Svetlova4888792019-09-12 15:40:40 +0300771 .. deprecated-removed:: 3.8 3.10
772 The *loop* parameter.
773
Chris Jerdonek1ce58412020-05-15 16:55:50 -0700774 .. method:: cancel(msg=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700775
776 Request the Task to be cancelled.
777
778 This arranges for a :exc:`CancelledError` exception to be thrown
779 into the wrapped coroutine on the next cycle of the event loop.
780
781 The coroutine then has a chance to clean up or even deny the
782 request by suppressing the exception with a :keyword:`try` ...
783 ... ``except CancelledError`` ... :keyword:`finally` block.
784 Therefore, unlike :meth:`Future.cancel`, :meth:`Task.cancel` does
785 not guarantee that the Task will be cancelled, although
786 suppressing cancellation completely is not common and is actively
787 discouraged.
788
Chris Jerdonek1ce58412020-05-15 16:55:50 -0700789 .. versionchanged:: 3.9
790 Added the ``msg`` parameter.
791
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700792 .. _asyncio_example_task_cancel:
793
Yury Selivanov3faaa882018-09-14 13:32:07 -0700794 The following example illustrates how coroutines can intercept
795 the cancellation request::
796
797 async def cancel_me():
798 print('cancel_me(): before sleep')
799
800 try:
801 # Wait for 1 hour
802 await asyncio.sleep(3600)
803 except asyncio.CancelledError:
804 print('cancel_me(): cancel sleep')
805 raise
806 finally:
807 print('cancel_me(): after sleep')
808
809 async def main():
810 # Create a "cancel_me" Task
811 task = asyncio.create_task(cancel_me())
812
813 # Wait for 1 second
814 await asyncio.sleep(1)
815
816 task.cancel()
817 try:
818 await task
819 except asyncio.CancelledError:
820 print("main(): cancel_me is cancelled now")
821
822 asyncio.run(main())
823
824 # Expected output:
825 #
826 # cancel_me(): before sleep
827 # cancel_me(): cancel sleep
828 # cancel_me(): after sleep
829 # main(): cancel_me is cancelled now
830
831 .. method:: cancelled()
832
833 Return ``True`` if the Task is *cancelled*.
834
835 The Task is *cancelled* when the cancellation was requested with
836 :meth:`cancel` and the wrapped coroutine propagated the
837 :exc:`CancelledError` exception thrown into it.
838
839 .. method:: done()
840
841 Return ``True`` if the Task is *done*.
842
843 A Task is *done* when the wrapped coroutine either returned
844 a value, raised an exception, or the Task was cancelled.
845
Yury Selivanove247b462018-09-20 12:43:59 -0400846 .. method:: result()
847
848 Return the result of the Task.
849
850 If the Task is *done*, the result of the wrapped coroutine
851 is returned (or if the coroutine raised an exception, that
852 exception is re-raised.)
853
854 If the Task has been *cancelled*, this method raises
855 a :exc:`CancelledError` exception.
856
857 If the Task's result isn't yet available, this method raises
858 a :exc:`InvalidStateError` exception.
859
860 .. method:: exception()
861
862 Return the exception of the Task.
863
864 If the wrapped coroutine raised an exception that exception
865 is returned. If the wrapped coroutine returned normally
866 this method returns ``None``.
867
868 If the Task has been *cancelled*, this method raises a
869 :exc:`CancelledError` exception.
870
871 If the Task isn't *done* yet, this method raises an
872 :exc:`InvalidStateError` exception.
873
874 .. method:: add_done_callback(callback, *, context=None)
875
876 Add a callback to be run when the Task is *done*.
877
878 This method should only be used in low-level callback-based code.
879
880 See the documentation of :meth:`Future.add_done_callback`
881 for more details.
882
883 .. method:: remove_done_callback(callback)
884
885 Remove *callback* from the callbacks list.
886
887 This method should only be used in low-level callback-based code.
888
889 See the documentation of :meth:`Future.remove_done_callback`
890 for more details.
891
Andre Delfinodcc997c2020-12-16 22:37:28 -0300892 .. method:: get_stack(*, limit=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700893
894 Return the list of stack frames for this Task.
895
896 If the wrapped coroutine is not done, this returns the stack
897 where it is suspended. If the coroutine has completed
898 successfully or was cancelled, this returns an empty list.
899 If the coroutine was terminated by an exception, this returns
900 the list of traceback frames.
901
902 The frames are always ordered from oldest to newest.
903
904 Only one stack frame is returned for a suspended coroutine.
905
906 The optional *limit* argument sets the maximum number of frames
907 to return; by default all available frames are returned.
908 The ordering of the returned list differs depending on whether
909 a stack or a traceback is returned: the newest frames of a
910 stack are returned, but the oldest frames of a traceback are
911 returned. (This matches the behavior of the traceback module.)
912
Andre Delfinodcc997c2020-12-16 22:37:28 -0300913 .. method:: print_stack(*, limit=None, file=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700914
915 Print the stack or traceback for this Task.
916
917 This produces output similar to that of the traceback module
918 for the frames retrieved by :meth:`get_stack`.
919
920 The *limit* argument is passed to :meth:`get_stack` directly.
921
922 The *file* argument is an I/O stream to which the output
923 is written; by default output is written to :data:`sys.stderr`.
924
Alex Grönholm98ef9202019-05-30 18:30:09 +0300925 .. method:: get_coro()
926
927 Return the coroutine object wrapped by the :class:`Task`.
928
929 .. versionadded:: 3.8
930
Yury Selivanov3faaa882018-09-14 13:32:07 -0700931 .. method:: get_name()
932
933 Return the name of the Task.
934
935 If no name has been explicitly assigned to the Task, the default
936 asyncio Task implementation generates a default name during
937 instantiation.
938
939 .. versionadded:: 3.8
940
941 .. method:: set_name(value)
942
943 Set the name of the Task.
944
945 The *value* argument can be any object, which is then
946 converted to a string.
947
948 In the default Task implementation, the name will be visible
949 in the :func:`repr` output of a task object.
950
951 .. versionadded:: 3.8
952
Yury Selivanov3faaa882018-09-14 13:32:07 -0700953
954.. _asyncio_generator_based_coro:
955
956Generator-based Coroutines
957==========================
958
959.. note::
960
961 Support for generator-based coroutines is **deprecated** and
Yury Selivanovfad6af22018-09-25 17:44:52 -0400962 is scheduled for removal in Python 3.10.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700963
964Generator-based coroutines predate async/await syntax. They are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400965Python generators that use ``yield from`` expressions to await
Yury Selivanov3faaa882018-09-14 13:32:07 -0700966on Futures and other coroutines.
967
968Generator-based coroutines should be decorated with
969:func:`@asyncio.coroutine <asyncio.coroutine>`, although this is not
970enforced.
971
972
973.. decorator:: coroutine
974
975 Decorator to mark generator-based coroutines.
976
977 This decorator enables legacy generator-based coroutines to be
978 compatible with async/await code::
979
980 @asyncio.coroutine
981 def old_style_coroutine():
982 yield from asyncio.sleep(1)
983
984 async def main():
985 await old_style_coroutine()
986
Yury Selivanov3faaa882018-09-14 13:32:07 -0700987 This decorator should not be used for :keyword:`async def`
988 coroutines.
989
Andrew Svetlov68b34a72019-05-16 17:52:10 +0300990 .. deprecated-removed:: 3.8 3.10
991
992 Use :keyword:`async def` instead.
993
Yury Selivanov3faaa882018-09-14 13:32:07 -0700994.. function:: iscoroutine(obj)
995
996 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`.
997
998 This method is different from :func:`inspect.iscoroutine` because
Yury Selivanov59ee5b12018-09-27 15:48:30 -0400999 it returns ``True`` for generator-based coroutines.
Yury Selivanov3faaa882018-09-14 13:32:07 -07001000
1001.. function:: iscoroutinefunction(func)
1002
1003 Return ``True`` if *func* is a :ref:`coroutine function
1004 <coroutine>`.
1005
1006 This method is different from :func:`inspect.iscoroutinefunction`
1007 because it returns ``True`` for generator-based coroutine functions
1008 decorated with :func:`@coroutine <coroutine>`.