blob: 57e0e07ad3bb6980fb5878f0bb39e427579c4ca1 [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
215 This function runs the passed coroutine, taking care of
Yury Selivanov47150392018-09-18 17:55:44 -0400216 managing the asyncio event loop and *finalizing asynchronous
217 generators*.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500218
219 This function cannot be called when another asyncio event loop is
220 running in the same thread.
221
Yury Selivanov3faaa882018-09-14 13:32:07 -0700222 If *debug* is ``True``, the event loop will be run in debug mode.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500223
224 This function always creates a new event loop and closes it at
225 the end. It should be used as a main entry point for asyncio
226 programs, and should ideally only be called once.
227
228 .. versionadded:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400229 **Important:** this function has been added to asyncio in
230 Python 3.7 on a :term:`provisional basis <provisional api>`.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500231
232
Yury Selivanov3faaa882018-09-14 13:32:07 -0700233Creating Tasks
234==============
Victor Stinnerea3183f2013-12-03 01:08:00 +0100235
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300236.. function:: create_task(coro, \*, name=None)
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200237
Yury Selivanove247b462018-09-20 12:43:59 -0400238 Wrap the *coro* :ref:`coroutine <coroutine>` into a :class:`Task`
239 and schedule its execution. Return the Task object.
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300240
241 If *name* is not ``None``, it is set as the name of the task using
242 :meth:`Task.set_name`.
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200243
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400244 The task is executed in the loop returned by :func:`get_running_loop`,
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200245 :exc:`RuntimeError` is raised if there is no running loop in
246 current thread.
247
Yury Selivanov47150392018-09-18 17:55:44 -0400248 This function has been **added in Python 3.7**. Prior to
249 Python 3.7, the low-level :func:`asyncio.ensure_future` function
250 can be used instead::
251
252 async def coro():
253 ...
254
255 # In Python 3.7+
256 task = asyncio.create_task(coro())
257 ...
258
259 # This works in all Python versions but is less readable
260 task = asyncio.ensure_future(coro())
261 ...
262
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200263 .. versionadded:: 3.7
264
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300265 .. versionchanged:: 3.8
266 Added the ``name`` parameter.
267
Victor Stinnerea3183f2013-12-03 01:08:00 +0100268
Yury Selivanov3faaa882018-09-14 13:32:07 -0700269Sleeping
270========
Andrew Svetlovf1240162016-01-11 14:40:35 +0200271
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100272.. coroutinefunction:: sleep(delay, result=None, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100273
Yury Selivanov3faaa882018-09-14 13:32:07 -0700274 Block for *delay* seconds.
275
276 If *result* is provided, it is returned to the caller
Eli Bendersky2d26af82014-01-20 06:59:23 -0800277 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100278
Hrvoje Nikšićcd602b82018-10-01 12:09:38 +0200279 ``sleep()`` always suspends the current task, allowing other tasks
280 to run.
281
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700282 .. deprecated-removed:: 3.8 3.10
283 The *loop* parameter.
Yury Selivanov47150392018-09-18 17:55:44 -0400284
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700285 .. _asyncio_example_sleep:
Victor Stinner45b27ed2014-02-01 02:36:43 +0100286
Yury Selivanov3faaa882018-09-14 13:32:07 -0700287 Example of coroutine displaying the current date every second
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400288 for 5 seconds::
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100289
Yury Selivanov3faaa882018-09-14 13:32:07 -0700290 import asyncio
291 import datetime
Victor Stinnerea3183f2013-12-03 01:08:00 +0100292
Yury Selivanov3faaa882018-09-14 13:32:07 -0700293 async def display_date():
294 loop = asyncio.get_running_loop()
295 end_time = loop.time() + 5.0
296 while True:
297 print(datetime.datetime.now())
298 if (loop.time() + 1.0) >= end_time:
299 break
300 await asyncio.sleep(1)
301
302 asyncio.run(display_date())
303
304
305Running Tasks Concurrently
306==========================
307
Yury Selivanove247b462018-09-20 12:43:59 -0400308.. awaitablefunction:: gather(\*aws, loop=None, return_exceptions=False)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700309
Yury Selivanove247b462018-09-20 12:43:59 -0400310 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400311 sequence *concurrently*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700312
Yury Selivanove247b462018-09-20 12:43:59 -0400313 If any awaitable in *aws* is a coroutine, it is automatically
Yury Selivanov47150392018-09-18 17:55:44 -0400314 scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700315
Yury Selivanov47150392018-09-18 17:55:44 -0400316 If all awaitables are completed successfully, the result is an
317 aggregate list of returned values. The order of result values
Yury Selivanove247b462018-09-20 12:43:59 -0400318 corresponds to the order of awaitables in *aws*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700319
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400320 If *return_exceptions* is ``False`` (default), the first
321 raised exception is immediately propagated to the task that
322 awaits on ``gather()``. Other awaitables in the *aws* sequence
323 **won't be cancelled** and will continue to run.
324
Yury Selivanov47150392018-09-18 17:55:44 -0400325 If *return_exceptions* is ``True``, exceptions are treated the
326 same as successful results, and aggregated in the result list.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700327
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400328 If ``gather()`` is *cancelled*, all submitted awaitables
Yury Selivanov3faaa882018-09-14 13:32:07 -0700329 (that have not completed yet) are also *cancelled*.
330
Yury Selivanove247b462018-09-20 12:43:59 -0400331 If any Task or Future from the *aws* sequence is *cancelled*, it is
Yury Selivanov47150392018-09-18 17:55:44 -0400332 treated as if it raised :exc:`CancelledError` -- the ``gather()``
333 call is **not** cancelled in this case. This is to prevent the
334 cancellation of one submitted Task/Future to cause other
335 Tasks/Futures to be cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700336
Andrew Svetlova4888792019-09-12 15:40:40 +0300337 .. deprecated-removed:: 3.8 3.10
338 The *loop* parameter.
339
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700340 .. _asyncio_example_gather:
341
Yury Selivanov3faaa882018-09-14 13:32:07 -0700342 Example::
343
344 import asyncio
345
346 async def factorial(name, number):
347 f = 1
348 for i in range(2, number + 1):
349 print(f"Task {name}: Compute factorial({i})...")
350 await asyncio.sleep(1)
351 f *= i
352 print(f"Task {name}: factorial({number}) = {f}")
353
354 async def main():
Yury Selivanov47150392018-09-18 17:55:44 -0400355 # Schedule three calls *concurrently*:
Yury Selivanov3faaa882018-09-14 13:32:07 -0700356 await asyncio.gather(
357 factorial("A", 2),
358 factorial("B", 3),
359 factorial("C", 4),
Miguel Ángel García9c53fa62018-09-18 08:01:26 +0200360 )
Yury Selivanov3faaa882018-09-14 13:32:07 -0700361
362 asyncio.run(main())
363
364 # Expected output:
365 #
366 # Task A: Compute factorial(2)...
367 # Task B: Compute factorial(2)...
368 # Task C: Compute factorial(2)...
369 # Task A: factorial(2) = 2
370 # Task B: Compute factorial(3)...
371 # Task C: Compute factorial(3)...
372 # Task B: factorial(3) = 6
373 # Task C: Compute factorial(4)...
374 # Task C: factorial(4) = 24
375
Yury Selivanov47150392018-09-18 17:55:44 -0400376 .. versionchanged:: 3.7
377 If the *gather* itself is cancelled, the cancellation is
378 propagated regardless of *return_exceptions*.
379
Yury Selivanov3faaa882018-09-14 13:32:07 -0700380
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400381Shielding From Cancellation
382===========================
Yury Selivanov3faaa882018-09-14 13:32:07 -0700383
Yury Selivanove247b462018-09-20 12:43:59 -0400384.. awaitablefunction:: shield(aw, \*, loop=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700385
Yury Selivanov47150392018-09-18 17:55:44 -0400386 Protect an :ref:`awaitable object <asyncio-awaitables>`
387 from being :meth:`cancelled <Task.cancel>`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700388
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400389 If *aw* is a coroutine it is automatically scheduled as a Task.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100390
391 The statement::
392
Andrew Svetlov88743422017-12-11 17:35:49 +0200393 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100394
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400395 is equivalent to::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100396
Andrew Svetlov88743422017-12-11 17:35:49 +0200397 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100398
Yury Selivanov3faaa882018-09-14 13:32:07 -0700399 *except* that if the coroutine containing it is cancelled, the
400 Task running in ``something()`` is not cancelled. From the point
401 of view of ``something()``, the cancellation did not happen.
402 Although its caller is still cancelled, so the "await" expression
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400403 still raises a :exc:`CancelledError`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100404
Yury Selivanov3faaa882018-09-14 13:32:07 -0700405 If ``something()`` is cancelled by other means (i.e. from within
406 itself) that would also cancel ``shield()``.
407
408 If it is desired to completely ignore cancellation (not recommended)
409 the ``shield()`` function should be combined with a try/except
410 clause, as follows::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100411
412 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200413 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100414 except CancelledError:
415 res = None
416
Andrew Svetlova4888792019-09-12 15:40:40 +0300417 .. deprecated-removed:: 3.8 3.10
418 The *loop* parameter.
419
Yury Selivanov950204d2016-05-16 16:23:00 -0400420
Yury Selivanov3faaa882018-09-14 13:32:07 -0700421Timeouts
422========
423
Yury Selivanove247b462018-09-20 12:43:59 -0400424.. coroutinefunction:: wait_for(aw, timeout, \*, loop=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700425
Yury Selivanove247b462018-09-20 12:43:59 -0400426 Wait for the *aw* :ref:`awaitable <asyncio-awaitables>`
Yury Selivanov47150392018-09-18 17:55:44 -0400427 to complete with a timeout.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700428
Yury Selivanove247b462018-09-20 12:43:59 -0400429 If *aw* is a coroutine it is automatically scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700430
431 *timeout* can either be ``None`` or a float or int number of seconds
432 to wait for. If *timeout* is ``None``, block until the future
433 completes.
434
435 If a timeout occurs, it cancels the task and raises
436 :exc:`asyncio.TimeoutError`.
437
Yury Selivanov47150392018-09-18 17:55:44 -0400438 To avoid the task :meth:`cancellation <Task.cancel>`,
439 wrap it in :func:`shield`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700440
441 The function will wait until the future is actually cancelled,
442 so the total wait time may exceed the *timeout*.
443
Yury Selivanove247b462018-09-20 12:43:59 -0400444 If the wait is cancelled, the future *aw* is also cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700445
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700446 .. deprecated-removed:: 3.8 3.10
447 The *loop* parameter.
Yury Selivanov47150392018-09-18 17:55:44 -0400448
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700449 .. _asyncio_example_waitfor:
450
Yury Selivanov3faaa882018-09-14 13:32:07 -0700451 Example::
452
453 async def eternity():
454 # Sleep for one hour
455 await asyncio.sleep(3600)
456 print('yay!')
457
458 async def main():
459 # Wait for at most 1 second
460 try:
461 await asyncio.wait_for(eternity(), timeout=1.0)
462 except asyncio.TimeoutError:
463 print('timeout!')
464
465 asyncio.run(main())
466
467 # Expected output:
468 #
469 # timeout!
470
471 .. versionchanged:: 3.7
Yury Selivanove247b462018-09-20 12:43:59 -0400472 When *aw* is cancelled due to a timeout, ``wait_for`` waits
473 for *aw* to be cancelled. Previously, it raised
Yury Selivanov3faaa882018-09-14 13:32:07 -0700474 :exc:`asyncio.TimeoutError` immediately.
475
476
477Waiting Primitives
478==================
479
Yury Selivanove247b462018-09-20 12:43:59 -0400480.. coroutinefunction:: wait(aws, \*, loop=None, timeout=None,\
Andrew Svetlovf1240162016-01-11 14:40:35 +0200481 return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100482
Yury Selivanove247b462018-09-20 12:43:59 -0400483 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov996859a2018-09-25 14:51:21 -0400484 set concurrently and block until the condition specified
Yury Selivanov47150392018-09-18 17:55:44 -0400485 by *return_when*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100486
Yury Selivanov3faaa882018-09-14 13:32:07 -0700487 Returns two sets of Tasks/Futures: ``(done, pending)``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100488
Yury Selivanov996859a2018-09-25 14:51:21 -0400489 Usage::
490
491 done, pending = await asyncio.wait(aws)
492
Yury Selivanov3faaa882018-09-14 13:32:07 -0700493 *timeout* (a float or int), if specified, can be used to control
494 the maximum number of seconds to wait before returning.
495
496 Note that this function does not raise :exc:`asyncio.TimeoutError`.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400497 Futures or Tasks that aren't done when the timeout occurs are simply
Yury Selivanov3faaa882018-09-14 13:32:07 -0700498 returned in the second set.
499
500 *return_when* indicates when this function should return. It must
501 be one of the following constants:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100502
503 .. tabularcolumns:: |l|L|
504
505 +-----------------------------+----------------------------------------+
506 | Constant | Description |
507 +=============================+========================================+
508 | :const:`FIRST_COMPLETED` | The function will return when any |
509 | | future finishes or is cancelled. |
510 +-----------------------------+----------------------------------------+
511 | :const:`FIRST_EXCEPTION` | The function will return when any |
512 | | future finishes by raising an |
513 | | exception. If no future raises an |
514 | | exception then it is equivalent to |
515 | | :const:`ALL_COMPLETED`. |
516 +-----------------------------+----------------------------------------+
517 | :const:`ALL_COMPLETED` | The function will return when all |
518 | | futures finish or are cancelled. |
519 +-----------------------------+----------------------------------------+
520
Yury Selivanov3faaa882018-09-14 13:32:07 -0700521 Unlike :func:`~asyncio.wait_for`, ``wait()`` does not cancel the
522 futures when a timeout occurs.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100523
Andrew Svetlova4888792019-09-12 15:40:40 +0300524 .. deprecated:: 3.8
525
526 If any awaitable in *aws* is a coroutine, it is automatically
527 scheduled as a Task. Passing coroutines objects to
528 ``wait()`` directly is deprecated as it leads to
529 :ref:`confusing behavior <asyncio_example_wait_coroutine>`.
530
531 .. deprecated-removed:: 3.8 3.10
532
533 The *loop* parameter.
534
Yury Selivanov996859a2018-09-25 14:51:21 -0400535 .. _asyncio_example_wait_coroutine:
536 .. note::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100537
Yury Selivanov996859a2018-09-25 14:51:21 -0400538 ``wait()`` schedules coroutines as Tasks automatically and later
539 returns those implicitly created Task objects in ``(done, pending)``
540 sets. Therefore the following code won't work as expected::
541
542 async def foo():
543 return 42
544
545 coro = foo()
546 done, pending = await asyncio.wait({coro})
547
548 if coro in done:
549 # This branch will never be run!
550
551 Here is how the above snippet can be fixed::
552
553 async def foo():
554 return 42
555
556 task = asyncio.create_task(foo())
557 done, pending = await asyncio.wait({task})
558
559 if task in done:
560 # Everything will work as expected now.
561
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700562 .. deprecated:: 3.8
563
Yury Selivanov996859a2018-09-25 14:51:21 -0400564 Passing coroutine objects to ``wait()`` directly is
565 deprecated.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100566
Victor Stinnerea3183f2013-12-03 01:08:00 +0100567
Yury Selivanove247b462018-09-20 12:43:59 -0400568.. function:: as_completed(aws, \*, loop=None, timeout=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700569
Yury Selivanove247b462018-09-20 12:43:59 -0400570 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400571 set concurrently. Return an iterator of :class:`Future` objects.
572 Each Future object returned represents the earliest result
573 from the set of the remaining awaitables.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700574
575 Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
576 all Futures are done.
577
Andrew Svetlova4888792019-09-12 15:40:40 +0300578 .. deprecated-removed:: 3.8 3.10
579 The *loop* parameter.
580
Yury Selivanov3faaa882018-09-14 13:32:07 -0700581 Example::
582
Yury Selivanove247b462018-09-20 12:43:59 -0400583 for f in as_completed(aws):
Yury Selivanov47150392018-09-18 17:55:44 -0400584 earliest_result = await f
Yury Selivanov3faaa882018-09-14 13:32:07 -0700585 # ...
Victor Stinnerea3183f2013-12-03 01:08:00 +0100586
Victor Stinner3e09e322013-12-03 01:22:06 +0100587
Yury Selivanov3faaa882018-09-14 13:32:07 -0700588Scheduling From Other Threads
589=============================
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100590
Yury Selivanov3faaa882018-09-14 13:32:07 -0700591.. function:: run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100592
Yury Selivanov3faaa882018-09-14 13:32:07 -0700593 Submit a coroutine to the given event loop. Thread-safe.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100594
Yury Selivanov47150392018-09-18 17:55:44 -0400595 Return a :class:`concurrent.futures.Future` to wait for the result
596 from another OS thread.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100597
Yury Selivanov3faaa882018-09-14 13:32:07 -0700598 This function is meant to be called from a different OS thread
599 than the one where the event loop is running. Example::
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200600
Yury Selivanov3faaa882018-09-14 13:32:07 -0700601 # Create a coroutine
602 coro = asyncio.sleep(1, result=3)
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500603
Yury Selivanov3faaa882018-09-14 13:32:07 -0700604 # Submit the coroutine to a given loop
605 future = asyncio.run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100606
Yury Selivanov3faaa882018-09-14 13:32:07 -0700607 # Wait for the result with an optional timeout argument
608 assert future.result(timeout) == 3
609
610 If an exception is raised in the coroutine, the returned Future
611 will be notified. It can also be used to cancel the task in
612 the event loop::
613
614 try:
615 result = future.result(timeout)
616 except asyncio.TimeoutError:
617 print('The coroutine took too long, cancelling the task...')
618 future.cancel()
619 except Exception as exc:
Mariatta9f43fbb2018-10-24 15:37:12 -0700620 print(f'The coroutine raised an exception: {exc!r}')
Yury Selivanov3faaa882018-09-14 13:32:07 -0700621 else:
Mariatta9f43fbb2018-10-24 15:37:12 -0700622 print(f'The coroutine returned: {result!r}')
Yury Selivanov3faaa882018-09-14 13:32:07 -0700623
624 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
625 section of the documentation.
626
Vaibhav Gupta3a810762018-12-26 20:17:17 +0530627 Unlike other asyncio functions this function requires the *loop*
Yury Selivanov3faaa882018-09-14 13:32:07 -0700628 argument to be passed explicitly.
629
630 .. versionadded:: 3.5.1
631
632
633Introspection
634=============
635
636
637.. function:: current_task(loop=None)
638
639 Return the currently running :class:`Task` instance, or ``None`` if
640 no task is running.
641
642 If *loop* is ``None`` :func:`get_running_loop` is used to get
643 the current loop.
644
645 .. versionadded:: 3.7
646
647
648.. function:: all_tasks(loop=None)
649
650 Return a set of not yet finished :class:`Task` objects run by
651 the loop.
652
653 If *loop* is ``None``, :func:`get_running_loop` is used for getting
654 current loop.
655
656 .. versionadded:: 3.7
657
658
659Task Object
660===========
661
662.. class:: Task(coro, \*, loop=None, name=None)
663
Yury Selivanovdb1a80e2018-09-21 16:23:15 -0400664 A :class:`Future-like <Future>` object that runs a Python
Yury Selivanov3faaa882018-09-14 13:32:07 -0700665 :ref:`coroutine <coroutine>`. Not thread-safe.
666
667 Tasks are used to run coroutines in event loops.
668 If a coroutine awaits on a Future, the Task suspends
669 the execution of the coroutine and waits for the completion
670 of the Future. When the Future is *done*, the execution of
671 the wrapped coroutine resumes.
672
673 Event loops use cooperative scheduling: an event loop runs
674 one Task at a time. While a Task awaits for the completion of a
675 Future, the event loop runs other Tasks, callbacks, or performs
676 IO operations.
677
678 Use the high-level :func:`asyncio.create_task` function to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400679 Tasks, or the low-level :meth:`loop.create_task` or
680 :func:`ensure_future` functions. Manual instantiation of Tasks
681 is discouraged.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700682
683 To cancel a running Task use the :meth:`cancel` method. Calling it
684 will cause the Task to throw a :exc:`CancelledError` exception into
685 the wrapped coroutine. If a coroutine is awaiting on a Future
686 object during cancellation, the Future object will be cancelled.
687
688 :meth:`cancelled` can be used to check if the Task was cancelled.
689 The method returns ``True`` if the wrapped coroutine did not
690 suppress the :exc:`CancelledError` exception and was actually
691 cancelled.
692
693 :class:`asyncio.Task` inherits from :class:`Future` all of its
694 APIs except :meth:`Future.set_result` and
695 :meth:`Future.set_exception`.
696
697 Tasks support the :mod:`contextvars` module. When a Task
698 is created it copies the current context and later runs its
699 coroutine in the copied context.
Elvis Pranskevichuse2b340a2018-05-29 17:31:01 -0400700
701 .. versionchanged:: 3.7
Yury Selivanov3faaa882018-09-14 13:32:07 -0700702 Added support for the :mod:`contextvars` module.
703
704 .. versionchanged:: 3.8
705 Added the ``name`` parameter.
706
Andrew Svetlova4888792019-09-12 15:40:40 +0300707 .. deprecated-removed:: 3.8 3.10
708 The *loop* parameter.
709
Yury Selivanov3faaa882018-09-14 13:32:07 -0700710 .. method:: cancel()
711
712 Request the Task to be cancelled.
713
714 This arranges for a :exc:`CancelledError` exception to be thrown
715 into the wrapped coroutine on the next cycle of the event loop.
716
717 The coroutine then has a chance to clean up or even deny the
718 request by suppressing the exception with a :keyword:`try` ...
719 ... ``except CancelledError`` ... :keyword:`finally` block.
720 Therefore, unlike :meth:`Future.cancel`, :meth:`Task.cancel` does
721 not guarantee that the Task will be cancelled, although
722 suppressing cancellation completely is not common and is actively
723 discouraged.
724
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700725 .. _asyncio_example_task_cancel:
726
Yury Selivanov3faaa882018-09-14 13:32:07 -0700727 The following example illustrates how coroutines can intercept
728 the cancellation request::
729
730 async def cancel_me():
731 print('cancel_me(): before sleep')
732
733 try:
734 # Wait for 1 hour
735 await asyncio.sleep(3600)
736 except asyncio.CancelledError:
737 print('cancel_me(): cancel sleep')
738 raise
739 finally:
740 print('cancel_me(): after sleep')
741
742 async def main():
743 # Create a "cancel_me" Task
744 task = asyncio.create_task(cancel_me())
745
746 # Wait for 1 second
747 await asyncio.sleep(1)
748
749 task.cancel()
750 try:
751 await task
752 except asyncio.CancelledError:
753 print("main(): cancel_me is cancelled now")
754
755 asyncio.run(main())
756
757 # Expected output:
758 #
759 # cancel_me(): before sleep
760 # cancel_me(): cancel sleep
761 # cancel_me(): after sleep
762 # main(): cancel_me is cancelled now
763
764 .. method:: cancelled()
765
766 Return ``True`` if the Task is *cancelled*.
767
768 The Task is *cancelled* when the cancellation was requested with
769 :meth:`cancel` and the wrapped coroutine propagated the
770 :exc:`CancelledError` exception thrown into it.
771
772 .. method:: done()
773
774 Return ``True`` if the Task is *done*.
775
776 A Task is *done* when the wrapped coroutine either returned
777 a value, raised an exception, or the Task was cancelled.
778
Yury Selivanove247b462018-09-20 12:43:59 -0400779 .. method:: result()
780
781 Return the result of the Task.
782
783 If the Task is *done*, the result of the wrapped coroutine
784 is returned (or if the coroutine raised an exception, that
785 exception is re-raised.)
786
787 If the Task has been *cancelled*, this method raises
788 a :exc:`CancelledError` exception.
789
790 If the Task's result isn't yet available, this method raises
791 a :exc:`InvalidStateError` exception.
792
793 .. method:: exception()
794
795 Return the exception of the Task.
796
797 If the wrapped coroutine raised an exception that exception
798 is returned. If the wrapped coroutine returned normally
799 this method returns ``None``.
800
801 If the Task has been *cancelled*, this method raises a
802 :exc:`CancelledError` exception.
803
804 If the Task isn't *done* yet, this method raises an
805 :exc:`InvalidStateError` exception.
806
807 .. method:: add_done_callback(callback, *, context=None)
808
809 Add a callback to be run when the Task is *done*.
810
811 This method should only be used in low-level callback-based code.
812
813 See the documentation of :meth:`Future.add_done_callback`
814 for more details.
815
816 .. method:: remove_done_callback(callback)
817
818 Remove *callback* from the callbacks list.
819
820 This method should only be used in low-level callback-based code.
821
822 See the documentation of :meth:`Future.remove_done_callback`
823 for more details.
824
Yury Selivanov3faaa882018-09-14 13:32:07 -0700825 .. method:: get_stack(\*, limit=None)
826
827 Return the list of stack frames for this Task.
828
829 If the wrapped coroutine is not done, this returns the stack
830 where it is suspended. If the coroutine has completed
831 successfully or was cancelled, this returns an empty list.
832 If the coroutine was terminated by an exception, this returns
833 the list of traceback frames.
834
835 The frames are always ordered from oldest to newest.
836
837 Only one stack frame is returned for a suspended coroutine.
838
839 The optional *limit* argument sets the maximum number of frames
840 to return; by default all available frames are returned.
841 The ordering of the returned list differs depending on whether
842 a stack or a traceback is returned: the newest frames of a
843 stack are returned, but the oldest frames of a traceback are
844 returned. (This matches the behavior of the traceback module.)
845
846 .. method:: print_stack(\*, limit=None, file=None)
847
848 Print the stack or traceback for this Task.
849
850 This produces output similar to that of the traceback module
851 for the frames retrieved by :meth:`get_stack`.
852
853 The *limit* argument is passed to :meth:`get_stack` directly.
854
855 The *file* argument is an I/O stream to which the output
856 is written; by default output is written to :data:`sys.stderr`.
857
Alex Grönholm98ef9202019-05-30 18:30:09 +0300858 .. method:: get_coro()
859
860 Return the coroutine object wrapped by the :class:`Task`.
861
862 .. versionadded:: 3.8
863
Yury Selivanov3faaa882018-09-14 13:32:07 -0700864 .. method:: get_name()
865
866 Return the name of the Task.
867
868 If no name has been explicitly assigned to the Task, the default
869 asyncio Task implementation generates a default name during
870 instantiation.
871
872 .. versionadded:: 3.8
873
874 .. method:: set_name(value)
875
876 Set the name of the Task.
877
878 The *value* argument can be any object, which is then
879 converted to a string.
880
881 In the default Task implementation, the name will be visible
882 in the :func:`repr` output of a task object.
883
884 .. versionadded:: 3.8
885
886 .. classmethod:: all_tasks(loop=None)
887
888 Return a set of all tasks for an event loop.
889
890 By default all tasks for the current event loop are returned.
891 If *loop* is ``None``, the :func:`get_event_loop` function
892 is used to get the current loop.
893
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700894 .. deprecated-removed:: 3.7 3.9
895
896 Do not call this as a task method. Use the :func:`asyncio.all_tasks`
897 function instead.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700898
899 .. classmethod:: current_task(loop=None)
900
901 Return the currently running task or ``None``.
902
903 If *loop* is ``None``, the :func:`get_event_loop` function
904 is used to get the current loop.
905
Matthias Bussonnierd0ebf132019-05-20 23:20:10 -0700906 .. deprecated-removed:: 3.7 3.9
907
908 Do not call this as a task method. Use the
909 :func:`asyncio.current_task` function instead.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700910
911
912.. _asyncio_generator_based_coro:
913
914Generator-based Coroutines
915==========================
916
917.. note::
918
919 Support for generator-based coroutines is **deprecated** and
Yury Selivanovfad6af22018-09-25 17:44:52 -0400920 is scheduled for removal in Python 3.10.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700921
922Generator-based coroutines predate async/await syntax. They are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400923Python generators that use ``yield from`` expressions to await
Yury Selivanov3faaa882018-09-14 13:32:07 -0700924on Futures and other coroutines.
925
926Generator-based coroutines should be decorated with
927:func:`@asyncio.coroutine <asyncio.coroutine>`, although this is not
928enforced.
929
930
931.. decorator:: coroutine
932
933 Decorator to mark generator-based coroutines.
934
935 This decorator enables legacy generator-based coroutines to be
936 compatible with async/await code::
937
938 @asyncio.coroutine
939 def old_style_coroutine():
940 yield from asyncio.sleep(1)
941
942 async def main():
943 await old_style_coroutine()
944
Yury Selivanov3faaa882018-09-14 13:32:07 -0700945 This decorator should not be used for :keyword:`async def`
946 coroutines.
947
Andrew Svetlov68b34a72019-05-16 17:52:10 +0300948 .. deprecated-removed:: 3.8 3.10
949
950 Use :keyword:`async def` instead.
951
Yury Selivanov3faaa882018-09-14 13:32:07 -0700952.. function:: iscoroutine(obj)
953
954 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`.
955
956 This method is different from :func:`inspect.iscoroutine` because
Yury Selivanov59ee5b12018-09-27 15:48:30 -0400957 it returns ``True`` for generator-based coroutines.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700958
959.. function:: iscoroutinefunction(func)
960
961 Return ``True`` if *func* is a :ref:`coroutine function
962 <coroutine>`.
963
964 This method is different from :func:`inspect.iscoroutinefunction`
965 because it returns ``True`` for generator-based coroutine functions
966 decorated with :func:`@coroutine <coroutine>`.