blob: 68292337939167cbcbf038f941460ff25e391c96 [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
Yury Selivanov3faaa882018-09-14 13:32:07 -070021Coroutines declared with async/await syntax is the preferred way of
22writing asyncio applications. For example, the following snippet
Yury Selivanovb042cf12018-09-18 02:47:54 -040023of code (requires Python 3.7+) prints "hello", waits 1 second,
24and 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
Elvis Pranskevichus63536bd2018-05-19 23:15:06 -0400213.. function:: run(coro, \*, debug=False)
Yury Selivanov02a0a192017-12-14 09:42:21 -0500214
Miss Islington (bot)2f644c02019-09-30 18:46:43 -0700215 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
Yury Selivanov47150392018-09-18 17:55:44 -0400218 managing the asyncio event loop and *finalizing asynchronous
219 generators*.
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
Miss Islington (bot)46333552019-09-25 02:12:47 -0700230 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
240
Yury Selivanov3faaa882018-09-14 13:32:07 -0700241Creating Tasks
242==============
Victor Stinnerea3183f2013-12-03 01:08:00 +0100243
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300244.. function:: create_task(coro, \*, name=None)
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200245
Yury Selivanove247b462018-09-20 12:43:59 -0400246 Wrap the *coro* :ref:`coroutine <coroutine>` into a :class:`Task`
247 and schedule its execution. Return the Task object.
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300248
249 If *name* is not ``None``, it is set as the name of the task using
250 :meth:`Task.set_name`.
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200251
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400252 The task is executed in the loop returned by :func:`get_running_loop`,
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200253 :exc:`RuntimeError` is raised if there is no running loop in
254 current thread.
255
Yury Selivanov47150392018-09-18 17:55:44 -0400256 This function has been **added in Python 3.7**. Prior to
257 Python 3.7, the low-level :func:`asyncio.ensure_future` function
258 can be used instead::
259
260 async def coro():
261 ...
262
263 # In Python 3.7+
264 task = asyncio.create_task(coro())
265 ...
266
267 # This works in all Python versions but is less readable
268 task = asyncio.ensure_future(coro())
269 ...
270
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200271 .. versionadded:: 3.7
272
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300273 .. versionchanged:: 3.8
274 Added the ``name`` parameter.
275
Victor Stinnerea3183f2013-12-03 01:08:00 +0100276
Yury Selivanov3faaa882018-09-14 13:32:07 -0700277Sleeping
278========
Andrew Svetlovf1240162016-01-11 14:40:35 +0200279
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100280.. coroutinefunction:: sleep(delay, result=None, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100281
Yury Selivanov3faaa882018-09-14 13:32:07 -0700282 Block for *delay* seconds.
283
284 If *result* is provided, it is returned to the caller
Eli Bendersky2d26af82014-01-20 06:59:23 -0800285 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100286
Hrvoje Nikšićcd602b82018-10-01 12:09:38 +0200287 ``sleep()`` always suspends the current task, allowing other tasks
288 to run.
289
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700290 .. deprecated-removed:: 3.8 3.10
291 The *loop* parameter.
Yury Selivanov47150392018-09-18 17:55:44 -0400292
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700293 .. _asyncio_example_sleep:
Victor Stinner45b27ed2014-02-01 02:36:43 +0100294
Yury Selivanov3faaa882018-09-14 13:32:07 -0700295 Example of coroutine displaying the current date every second
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400296 for 5 seconds::
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100297
Yury Selivanov3faaa882018-09-14 13:32:07 -0700298 import asyncio
299 import datetime
Victor Stinnerea3183f2013-12-03 01:08:00 +0100300
Yury Selivanov3faaa882018-09-14 13:32:07 -0700301 async def display_date():
302 loop = asyncio.get_running_loop()
303 end_time = loop.time() + 5.0
304 while True:
305 print(datetime.datetime.now())
306 if (loop.time() + 1.0) >= end_time:
307 break
308 await asyncio.sleep(1)
309
310 asyncio.run(display_date())
311
312
313Running Tasks Concurrently
314==========================
315
Yury Selivanove247b462018-09-20 12:43:59 -0400316.. awaitablefunction:: gather(\*aws, loop=None, return_exceptions=False)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700317
Yury Selivanove247b462018-09-20 12:43:59 -0400318 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400319 sequence *concurrently*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700320
Yury Selivanove247b462018-09-20 12:43:59 -0400321 If any awaitable in *aws* is a coroutine, it is automatically
Yury Selivanov47150392018-09-18 17:55:44 -0400322 scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700323
Yury Selivanov47150392018-09-18 17:55:44 -0400324 If all awaitables are completed successfully, the result is an
325 aggregate list of returned values. The order of result values
Yury Selivanove247b462018-09-20 12:43:59 -0400326 corresponds to the order of awaitables in *aws*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700327
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400328 If *return_exceptions* is ``False`` (default), the first
329 raised exception is immediately propagated to the task that
330 awaits on ``gather()``. Other awaitables in the *aws* sequence
331 **won't be cancelled** and will continue to run.
332
Yury Selivanov47150392018-09-18 17:55:44 -0400333 If *return_exceptions* is ``True``, exceptions are treated the
334 same as successful results, and aggregated in the result list.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700335
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400336 If ``gather()`` is *cancelled*, all submitted awaitables
Yury Selivanov3faaa882018-09-14 13:32:07 -0700337 (that have not completed yet) are also *cancelled*.
338
Yury Selivanove247b462018-09-20 12:43:59 -0400339 If any Task or Future from the *aws* sequence is *cancelled*, it is
Yury Selivanov47150392018-09-18 17:55:44 -0400340 treated as if it raised :exc:`CancelledError` -- the ``gather()``
341 call is **not** cancelled in this case. This is to prevent the
342 cancellation of one submitted Task/Future to cause other
343 Tasks/Futures to be cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700344
Miss Islington (bot)345bfc92019-09-12 05:59:50 -0700345 .. deprecated-removed:: 3.8 3.10
346 The *loop* parameter.
347
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
Yury Selivanov47150392018-09-18 17:55:44 -0400384 .. versionchanged:: 3.7
385 If the *gather* itself is cancelled, the cancellation is
386 propagated regardless of *return_exceptions*.
387
Yury Selivanov3faaa882018-09-14 13:32:07 -0700388
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400389Shielding From Cancellation
390===========================
Yury Selivanov3faaa882018-09-14 13:32:07 -0700391
Yury Selivanove247b462018-09-20 12:43:59 -0400392.. awaitablefunction:: shield(aw, \*, loop=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700393
Yury Selivanov47150392018-09-18 17:55:44 -0400394 Protect an :ref:`awaitable object <asyncio-awaitables>`
395 from being :meth:`cancelled <Task.cancel>`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700396
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400397 If *aw* is a coroutine it is automatically scheduled as a Task.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100398
399 The statement::
400
Andrew Svetlov88743422017-12-11 17:35:49 +0200401 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100402
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400403 is equivalent to::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100404
Andrew Svetlov88743422017-12-11 17:35:49 +0200405 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100406
Yury Selivanov3faaa882018-09-14 13:32:07 -0700407 *except* that if the coroutine containing it is cancelled, the
408 Task running in ``something()`` is not cancelled. From the point
409 of view of ``something()``, the cancellation did not happen.
410 Although its caller is still cancelled, so the "await" expression
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400411 still raises a :exc:`CancelledError`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100412
Yury Selivanov3faaa882018-09-14 13:32:07 -0700413 If ``something()`` is cancelled by other means (i.e. from within
414 itself) that would also cancel ``shield()``.
415
416 If it is desired to completely ignore cancellation (not recommended)
417 the ``shield()`` function should be combined with a try/except
418 clause, as follows::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100419
420 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200421 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100422 except CancelledError:
423 res = None
424
Miss Islington (bot)345bfc92019-09-12 05:59:50 -0700425 .. deprecated-removed:: 3.8 3.10
426 The *loop* parameter.
427
Yury Selivanov950204d2016-05-16 16:23:00 -0400428
Yury Selivanov3faaa882018-09-14 13:32:07 -0700429Timeouts
430========
431
Yury Selivanove247b462018-09-20 12:43:59 -0400432.. coroutinefunction:: wait_for(aw, timeout, \*, loop=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700433
Yury Selivanove247b462018-09-20 12:43:59 -0400434 Wait for the *aw* :ref:`awaitable <asyncio-awaitables>`
Yury Selivanov47150392018-09-18 17:55:44 -0400435 to complete with a timeout.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700436
Yury Selivanove247b462018-09-20 12:43:59 -0400437 If *aw* is a coroutine it is automatically scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700438
439 *timeout* can either be ``None`` or a float or int number of seconds
440 to wait for. If *timeout* is ``None``, block until the future
441 completes.
442
443 If a timeout occurs, it cancels the task and raises
444 :exc:`asyncio.TimeoutError`.
445
Yury Selivanov47150392018-09-18 17:55:44 -0400446 To avoid the task :meth:`cancellation <Task.cancel>`,
447 wrap it in :func:`shield`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700448
449 The function will wait until the future is actually cancelled,
450 so the total wait time may exceed the *timeout*.
451
Yury Selivanove247b462018-09-20 12:43:59 -0400452 If the wait is cancelled, the future *aw* is also cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700453
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700454 .. deprecated-removed:: 3.8 3.10
455 The *loop* parameter.
Yury Selivanov47150392018-09-18 17:55:44 -0400456
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700457 .. _asyncio_example_waitfor:
458
Yury Selivanov3faaa882018-09-14 13:32:07 -0700459 Example::
460
461 async def eternity():
462 # Sleep for one hour
463 await asyncio.sleep(3600)
464 print('yay!')
465
466 async def main():
467 # Wait for at most 1 second
468 try:
469 await asyncio.wait_for(eternity(), timeout=1.0)
470 except asyncio.TimeoutError:
471 print('timeout!')
472
473 asyncio.run(main())
474
475 # Expected output:
476 #
477 # timeout!
478
479 .. versionchanged:: 3.7
Yury Selivanove247b462018-09-20 12:43:59 -0400480 When *aw* is cancelled due to a timeout, ``wait_for`` waits
481 for *aw* to be cancelled. Previously, it raised
Yury Selivanov3faaa882018-09-14 13:32:07 -0700482 :exc:`asyncio.TimeoutError` immediately.
483
484
485Waiting Primitives
486==================
487
Yury Selivanove247b462018-09-20 12:43:59 -0400488.. coroutinefunction:: wait(aws, \*, loop=None, timeout=None,\
Andrew Svetlovf1240162016-01-11 14:40:35 +0200489 return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100490
Yury Selivanove247b462018-09-20 12:43:59 -0400491 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov996859a2018-09-25 14:51:21 -0400492 set concurrently and block until the condition specified
Yury Selivanov47150392018-09-18 17:55:44 -0400493 by *return_when*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100494
Yury Selivanov3faaa882018-09-14 13:32:07 -0700495 Returns two sets of Tasks/Futures: ``(done, pending)``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100496
Yury Selivanov996859a2018-09-25 14:51:21 -0400497 Usage::
498
499 done, pending = await asyncio.wait(aws)
500
Yury Selivanov3faaa882018-09-14 13:32:07 -0700501 *timeout* (a float or int), if specified, can be used to control
502 the maximum number of seconds to wait before returning.
503
504 Note that this function does not raise :exc:`asyncio.TimeoutError`.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400505 Futures or Tasks that aren't done when the timeout occurs are simply
Yury Selivanov3faaa882018-09-14 13:32:07 -0700506 returned in the second set.
507
508 *return_when* indicates when this function should return. It must
509 be one of the following constants:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100510
511 .. tabularcolumns:: |l|L|
512
513 +-----------------------------+----------------------------------------+
514 | Constant | Description |
515 +=============================+========================================+
516 | :const:`FIRST_COMPLETED` | The function will return when any |
517 | | future finishes or is cancelled. |
518 +-----------------------------+----------------------------------------+
519 | :const:`FIRST_EXCEPTION` | The function will return when any |
520 | | future finishes by raising an |
521 | | exception. If no future raises an |
522 | | exception then it is equivalent to |
523 | | :const:`ALL_COMPLETED`. |
524 +-----------------------------+----------------------------------------+
525 | :const:`ALL_COMPLETED` | The function will return when all |
526 | | futures finish or are cancelled. |
527 +-----------------------------+----------------------------------------+
528
Yury Selivanov3faaa882018-09-14 13:32:07 -0700529 Unlike :func:`~asyncio.wait_for`, ``wait()`` does not cancel the
530 futures when a timeout occurs.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100531
Miss Islington (bot)345bfc92019-09-12 05:59:50 -0700532 .. deprecated:: 3.8
533
534 If any awaitable in *aws* is a coroutine, it is automatically
535 scheduled as a Task. Passing coroutines objects to
536 ``wait()`` directly is deprecated as it leads to
537 :ref:`confusing behavior <asyncio_example_wait_coroutine>`.
538
539 .. deprecated-removed:: 3.8 3.10
540
541 The *loop* parameter.
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
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700570 .. deprecated:: 3.8
571
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
Yury Selivanove247b462018-09-20 12:43:59 -0400576.. function:: as_completed(aws, \*, loop=None, 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*
Yury Selivanov47150392018-09-18 17:55:44 -0400579 set concurrently. Return an iterator of :class:`Future` objects.
580 Each Future object returned represents the earliest result
581 from the set 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
Miss Islington (bot)345bfc92019-09-12 05:59:50 -0700586 .. deprecated-removed:: 3.8 3.10
587 The *loop* parameter.
588
Yury Selivanov3faaa882018-09-14 13:32:07 -0700589 Example::
590
Yury Selivanove247b462018-09-20 12:43:59 -0400591 for f in as_completed(aws):
Yury Selivanov47150392018-09-18 17:55:44 -0400592 earliest_result = await f
Yury Selivanov3faaa882018-09-14 13:32:07 -0700593 # ...
Victor Stinnerea3183f2013-12-03 01:08:00 +0100594
Victor Stinner3e09e322013-12-03 01:22:06 +0100595
Yury Selivanov3faaa882018-09-14 13:32:07 -0700596Scheduling From Other Threads
597=============================
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100598
Yury Selivanov3faaa882018-09-14 13:32:07 -0700599.. function:: run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100600
Yury Selivanov3faaa882018-09-14 13:32:07 -0700601 Submit a coroutine to the given event loop. Thread-safe.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100602
Yury Selivanov47150392018-09-18 17:55:44 -0400603 Return a :class:`concurrent.futures.Future` to wait for the result
604 from another OS thread.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100605
Yury Selivanov3faaa882018-09-14 13:32:07 -0700606 This function is meant to be called from a different OS thread
607 than the one where the event loop is running. Example::
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200608
Yury Selivanov3faaa882018-09-14 13:32:07 -0700609 # Create a coroutine
610 coro = asyncio.sleep(1, result=3)
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500611
Yury Selivanov3faaa882018-09-14 13:32:07 -0700612 # Submit the coroutine to a given loop
613 future = asyncio.run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100614
Yury Selivanov3faaa882018-09-14 13:32:07 -0700615 # Wait for the result with an optional timeout argument
616 assert future.result(timeout) == 3
617
618 If an exception is raised in the coroutine, the returned Future
619 will be notified. It can also be used to cancel the task in
620 the event loop::
621
622 try:
623 result = future.result(timeout)
624 except asyncio.TimeoutError:
625 print('The coroutine took too long, cancelling the task...')
626 future.cancel()
627 except Exception as exc:
Mariatta9f43fbb2018-10-24 15:37:12 -0700628 print(f'The coroutine raised an exception: {exc!r}')
Yury Selivanov3faaa882018-09-14 13:32:07 -0700629 else:
Mariatta9f43fbb2018-10-24 15:37:12 -0700630 print(f'The coroutine returned: {result!r}')
Yury Selivanov3faaa882018-09-14 13:32:07 -0700631
632 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
633 section of the documentation.
634
Vaibhav Gupta3a810762018-12-26 20:17:17 +0530635 Unlike other asyncio functions this function requires the *loop*
Yury Selivanov3faaa882018-09-14 13:32:07 -0700636 argument to be passed explicitly.
637
638 .. versionadded:: 3.5.1
639
640
641Introspection
642=============
643
644
645.. function:: current_task(loop=None)
646
647 Return the currently running :class:`Task` instance, or ``None`` if
648 no task is running.
649
650 If *loop* is ``None`` :func:`get_running_loop` is used to get
651 the current loop.
652
653 .. versionadded:: 3.7
654
655
656.. function:: all_tasks(loop=None)
657
658 Return a set of not yet finished :class:`Task` objects run by
659 the loop.
660
661 If *loop* is ``None``, :func:`get_running_loop` is used for getting
662 current loop.
663
664 .. versionadded:: 3.7
665
666
667Task Object
668===========
669
670.. class:: Task(coro, \*, loop=None, name=None)
671
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400672 A :class:`Future-like <Future>` object that runs a Python
Yury Selivanov3faaa882018-09-14 13:32:07 -0700673 :ref:`coroutine <coroutine>`. Not thread-safe.
674
675 Tasks are used to run coroutines in event loops.
676 If a coroutine awaits on a Future, the Task suspends
677 the execution of the coroutine and waits for the completion
678 of the Future. When the Future is *done*, the execution of
679 the wrapped coroutine resumes.
680
681 Event loops use cooperative scheduling: an event loop runs
682 one Task at a time. While a Task awaits for the completion of a
683 Future, the event loop runs other Tasks, callbacks, or performs
684 IO operations.
685
686 Use the high-level :func:`asyncio.create_task` function to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400687 Tasks, or the low-level :meth:`loop.create_task` or
688 :func:`ensure_future` functions. Manual instantiation of Tasks
689 is discouraged.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700690
691 To cancel a running Task use the :meth:`cancel` method. Calling it
692 will cause the Task to throw a :exc:`CancelledError` exception into
693 the wrapped coroutine. If a coroutine is awaiting on a Future
694 object during cancellation, the Future object will be cancelled.
695
696 :meth:`cancelled` can be used to check if the Task was cancelled.
697 The method returns ``True`` if the wrapped coroutine did not
698 suppress the :exc:`CancelledError` exception and was actually
699 cancelled.
700
701 :class:`asyncio.Task` inherits from :class:`Future` all of its
702 APIs except :meth:`Future.set_result` and
703 :meth:`Future.set_exception`.
704
705 Tasks support the :mod:`contextvars` module. When a Task
706 is created it copies the current context and later runs its
707 coroutine in the copied context.
Elvis Pranskevichuse2b340a2018-05-29 17:31:01 -0400708
709 .. versionchanged:: 3.7
Yury Selivanov3faaa882018-09-14 13:32:07 -0700710 Added support for the :mod:`contextvars` module.
711
712 .. versionchanged:: 3.8
713 Added the ``name`` parameter.
714
Miss Islington (bot)345bfc92019-09-12 05:59:50 -0700715 .. deprecated-removed:: 3.8 3.10
716 The *loop* parameter.
717
Yury Selivanov3faaa882018-09-14 13:32:07 -0700718 .. method:: cancel()
719
720 Request the Task to be cancelled.
721
722 This arranges for a :exc:`CancelledError` exception to be thrown
723 into the wrapped coroutine on the next cycle of the event loop.
724
725 The coroutine then has a chance to clean up or even deny the
726 request by suppressing the exception with a :keyword:`try` ...
727 ... ``except CancelledError`` ... :keyword:`finally` block.
728 Therefore, unlike :meth:`Future.cancel`, :meth:`Task.cancel` does
729 not guarantee that the Task will be cancelled, although
730 suppressing cancellation completely is not common and is actively
731 discouraged.
732
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700733 .. _asyncio_example_task_cancel:
734
Yury Selivanov3faaa882018-09-14 13:32:07 -0700735 The following example illustrates how coroutines can intercept
736 the cancellation request::
737
738 async def cancel_me():
739 print('cancel_me(): before sleep')
740
741 try:
742 # Wait for 1 hour
743 await asyncio.sleep(3600)
744 except asyncio.CancelledError:
745 print('cancel_me(): cancel sleep')
746 raise
747 finally:
748 print('cancel_me(): after sleep')
749
750 async def main():
751 # Create a "cancel_me" Task
752 task = asyncio.create_task(cancel_me())
753
754 # Wait for 1 second
755 await asyncio.sleep(1)
756
757 task.cancel()
758 try:
759 await task
760 except asyncio.CancelledError:
761 print("main(): cancel_me is cancelled now")
762
763 asyncio.run(main())
764
765 # Expected output:
766 #
767 # cancel_me(): before sleep
768 # cancel_me(): cancel sleep
769 # cancel_me(): after sleep
770 # main(): cancel_me is cancelled now
771
772 .. method:: cancelled()
773
774 Return ``True`` if the Task is *cancelled*.
775
776 The Task is *cancelled* when the cancellation was requested with
777 :meth:`cancel` and the wrapped coroutine propagated the
778 :exc:`CancelledError` exception thrown into it.
779
780 .. method:: done()
781
782 Return ``True`` if the Task is *done*.
783
784 A Task is *done* when the wrapped coroutine either returned
785 a value, raised an exception, or the Task was cancelled.
786
Yury Selivanove247b462018-09-20 12:43:59 -0400787 .. method:: result()
788
789 Return the result of the Task.
790
791 If the Task is *done*, the result of the wrapped coroutine
792 is returned (or if the coroutine raised an exception, that
793 exception is re-raised.)
794
795 If the Task has been *cancelled*, this method raises
796 a :exc:`CancelledError` exception.
797
798 If the Task's result isn't yet available, this method raises
799 a :exc:`InvalidStateError` exception.
800
801 .. method:: exception()
802
803 Return the exception of the Task.
804
805 If the wrapped coroutine raised an exception that exception
806 is returned. If the wrapped coroutine returned normally
807 this method returns ``None``.
808
809 If the Task has been *cancelled*, this method raises a
810 :exc:`CancelledError` exception.
811
812 If the Task isn't *done* yet, this method raises an
813 :exc:`InvalidStateError` exception.
814
815 .. method:: add_done_callback(callback, *, context=None)
816
817 Add a callback to be run when the Task is *done*.
818
819 This method should only be used in low-level callback-based code.
820
821 See the documentation of :meth:`Future.add_done_callback`
822 for more details.
823
824 .. method:: remove_done_callback(callback)
825
826 Remove *callback* from the callbacks list.
827
828 This method should only be used in low-level callback-based code.
829
830 See the documentation of :meth:`Future.remove_done_callback`
831 for more details.
832
Yury Selivanov3faaa882018-09-14 13:32:07 -0700833 .. method:: get_stack(\*, limit=None)
834
835 Return the list of stack frames for this Task.
836
837 If the wrapped coroutine is not done, this returns the stack
838 where it is suspended. If the coroutine has completed
839 successfully or was cancelled, this returns an empty list.
840 If the coroutine was terminated by an exception, this returns
841 the list of traceback frames.
842
843 The frames are always ordered from oldest to newest.
844
845 Only one stack frame is returned for a suspended coroutine.
846
847 The optional *limit* argument sets the maximum number of frames
848 to return; by default all available frames are returned.
849 The ordering of the returned list differs depending on whether
850 a stack or a traceback is returned: the newest frames of a
851 stack are returned, but the oldest frames of a traceback are
852 returned. (This matches the behavior of the traceback module.)
853
854 .. method:: print_stack(\*, limit=None, file=None)
855
856 Print the stack or traceback for this Task.
857
858 This produces output similar to that of the traceback module
859 for the frames retrieved by :meth:`get_stack`.
860
861 The *limit* argument is passed to :meth:`get_stack` directly.
862
863 The *file* argument is an I/O stream to which the output
864 is written; by default output is written to :data:`sys.stderr`.
865
Alex Grönholm98ef9202019-05-30 18:30:09 +0300866 .. method:: get_coro()
867
868 Return the coroutine object wrapped by the :class:`Task`.
869
870 .. versionadded:: 3.8
871
Yury Selivanov3faaa882018-09-14 13:32:07 -0700872 .. method:: get_name()
873
874 Return the name of the Task.
875
876 If no name has been explicitly assigned to the Task, the default
877 asyncio Task implementation generates a default name during
878 instantiation.
879
880 .. versionadded:: 3.8
881
882 .. method:: set_name(value)
883
884 Set the name of the Task.
885
886 The *value* argument can be any object, which is then
887 converted to a string.
888
889 In the default Task implementation, the name will be visible
890 in the :func:`repr` output of a task object.
891
892 .. versionadded:: 3.8
893
894 .. classmethod:: all_tasks(loop=None)
895
896 Return a set of all tasks for an event loop.
897
898 By default all tasks for the current event loop are returned.
899 If *loop* is ``None``, the :func:`get_event_loop` function
900 is used to get the current loop.
901
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700902 .. deprecated-removed:: 3.7 3.9
903
904 Do not call this as a task method. Use the :func:`asyncio.all_tasks`
905 function instead.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700906
907 .. classmethod:: current_task(loop=None)
908
909 Return the currently running task or ``None``.
910
911 If *loop* is ``None``, the :func:`get_event_loop` function
912 is used to get the current loop.
913
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700914 .. deprecated-removed:: 3.7 3.9
915
916 Do not call this as a task method. Use the
917 :func:`asyncio.current_task` function instead.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700918
919
920.. _asyncio_generator_based_coro:
921
922Generator-based Coroutines
923==========================
924
925.. note::
926
927 Support for generator-based coroutines is **deprecated** and
Yury Selivanovfad6af22018-09-25 17:44:52 -0400928 is scheduled for removal in Python 3.10.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700929
930Generator-based coroutines predate async/await syntax. They are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400931Python generators that use ``yield from`` expressions to await
Yury Selivanov3faaa882018-09-14 13:32:07 -0700932on Futures and other coroutines.
933
934Generator-based coroutines should be decorated with
935:func:`@asyncio.coroutine <asyncio.coroutine>`, although this is not
936enforced.
937
938
939.. decorator:: coroutine
940
941 Decorator to mark generator-based coroutines.
942
943 This decorator enables legacy generator-based coroutines to be
944 compatible with async/await code::
945
946 @asyncio.coroutine
947 def old_style_coroutine():
948 yield from asyncio.sleep(1)
949
950 async def main():
951 await old_style_coroutine()
952
Yury Selivanov3faaa882018-09-14 13:32:07 -0700953 This decorator should not be used for :keyword:`async def`
954 coroutines.
955
Andrew Svetlov68b34a72019-05-16 17:52:10 +0300956 .. deprecated-removed:: 3.8 3.10
957
958 Use :keyword:`async def` instead.
959
Yury Selivanov3faaa882018-09-14 13:32:07 -0700960.. function:: iscoroutine(obj)
961
962 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`.
963
964 This method is different from :func:`inspect.iscoroutine` because
Yury Selivanov59ee5b12018-09-27 15:48:30 -0400965 it returns ``True`` for generator-based coroutines.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700966
967.. function:: iscoroutinefunction(func)
968
969 Return ``True`` if *func* is a :ref:`coroutine function
970 <coroutine>`.
971
972 This method is different from :func:`inspect.iscoroutinefunction`
973 because it returns ``True`` for generator-based coroutine functions
974 decorated with :func:`@coroutine <coroutine>`.