blob: b33a7df4e822f3da62c62ca0d34fbcaf8c40dd26 [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
Yury Selivanov3faaa882018-09-14 13:32:07 -070043To 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():
60 print('started at', time.strftime('%X'))
61
62 await say_after(1, 'hello')
63 await say_after(2, 'world')
64
65 print('finished at', time.strftime('%X'))
66
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
89 print('started at', time.strftime('%X'))
90
91 # Wait until both tasks are completed (should take
92 # around 2 seconds.)
93 await task1
94 await task2
95
96 print('finished at', time.strftime('%X'))
97
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()".
132 # (a coroutine object is created but not awaited)
133 nested()
134
135 # Let's do it differently now and await it:
136 print(await nested()) # will print "42".
137
138 asyncio.run(main())
139
140.. important::
141
142 In this documentation the term "coroutine" can be used for
143 two closely related concepts:
144
145 * a *coroutine function*: an :keyword:`async def` function;
146
147 * a *coroutine object*: an object returned by calling a
148 *coroutine function*.
149
150asyncio also supports legacy :ref:`generator-based
151<asyncio_generator_based_coro>` coroutines.
152
153
154.. rubric:: Tasks
Yury Selivanov47150392018-09-18 17:55:44 -0400155
156*Tasks* are used to schedule coroutines *concurrently*.
Yury Selivanov47150392018-09-18 17:55:44 -0400157
Yury Selivanove247b462018-09-20 12:43:59 -0400158When a coroutine is wrapped into a *Task* with functions like
159:func:`asyncio.create_task` the coroutine is automatically
160scheduled to run soon::
Yury Selivanov3faaa882018-09-14 13:32:07 -0700161
Yury Selivanove247b462018-09-20 12:43:59 -0400162 import asyncio
Yury Selivanov3faaa882018-09-14 13:32:07 -0700163
Yury Selivanove247b462018-09-20 12:43:59 -0400164 async def nested():
165 return 42
166
167 async def main():
168 # Schedule nested() to run soon concurrently
169 # with "main()".
170 task = asyncio.create_task(nested())
171
172 # "task" can now be used to cancel "nested()", or
173 # can simply be awaited to wait until it is complete:
174 await task
175
176 asyncio.run(main())
Victor Stinner337e03f2014-08-11 01:11:13 +0200177
Victor Stinnerea3183f2013-12-03 01:08:00 +0100178
Yury Selivanov47150392018-09-18 17:55:44 -0400179.. rubric:: Futures
180
Yury Selivanove247b462018-09-20 12:43:59 -0400181A :class:`Future` is a special **low-level** awaitable object that
182represents an **eventual result** of an asynchronous operation.
Yury Selivanov47150392018-09-18 17:55:44 -0400183
Yury Selivanove247b462018-09-20 12:43:59 -0400184When a Future object is *awaited* it means that the coroutine will
185wait until the Future is resolved in some other place.
186
Yury Selivanov47150392018-09-18 17:55:44 -0400187Future objects in asyncio are needed to allow callback-based code
188to be used with async/await.
189
Yury Selivanove247b462018-09-20 12:43:59 -0400190Normally **there is no need** to create Future objects at the
Yury Selivanov47150392018-09-18 17:55:44 -0400191application level code.
192
193Future objects, sometimes exposed by libraries and some asyncio
Yury Selivanove247b462018-09-20 12:43:59 -0400194APIs, can be awaited::
Yury Selivanov47150392018-09-18 17:55:44 -0400195
196 async def main():
197 await function_that_returns_a_future_object()
198
199 # this is also valid:
200 await asyncio.gather(
201 function_that_returns_a_future_object(),
202 some_python_coroutine()
203 )
204
Yury Selivanove247b462018-09-20 12:43:59 -0400205A good example of a low-level function that returns a Future object
206is :meth:`loop.run_in_executor`.
207
Yury Selivanov47150392018-09-18 17:55:44 -0400208
Yury Selivanov3faaa882018-09-14 13:32:07 -0700209Running an asyncio Program
210==========================
Victor Stinnerea3183f2013-12-03 01:08:00 +0100211
Elvis Pranskevichus63536bd2018-05-19 23:15:06 -0400212.. function:: run(coro, \*, debug=False)
Yury Selivanov02a0a192017-12-14 09:42:21 -0500213
214 This function runs the passed coroutine, taking care of
Yury Selivanov47150392018-09-18 17:55:44 -0400215 managing the asyncio event loop and *finalizing asynchronous
216 generators*.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500217
218 This function cannot be called when another asyncio event loop is
219 running in the same thread.
220
Yury Selivanov3faaa882018-09-14 13:32:07 -0700221 If *debug* is ``True``, the event loop will be run in debug mode.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500222
223 This function always creates a new event loop and closes it at
224 the end. It should be used as a main entry point for asyncio
225 programs, and should ideally only be called once.
226
227 .. versionadded:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400228 **Important:** this function has been added to asyncio in
229 Python 3.7 on a :term:`provisional basis <provisional api>`.
Yury Selivanov02a0a192017-12-14 09:42:21 -0500230
231
Yury Selivanov3faaa882018-09-14 13:32:07 -0700232Creating Tasks
233==============
Victor Stinnerea3183f2013-12-03 01:08:00 +0100234
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300235.. function:: create_task(coro, \*, name=None)
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200236
Yury Selivanove247b462018-09-20 12:43:59 -0400237 Wrap the *coro* :ref:`coroutine <coroutine>` into a :class:`Task`
238 and schedule its execution. Return the Task object.
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300239
240 If *name* is not ``None``, it is set as the name of the task using
241 :meth:`Task.set_name`.
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200242
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400243 The task is executed in the loop returned by :func:`get_running_loop`,
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200244 :exc:`RuntimeError` is raised if there is no running loop in
245 current thread.
246
Yury Selivanov47150392018-09-18 17:55:44 -0400247 This function has been **added in Python 3.7**. Prior to
248 Python 3.7, the low-level :func:`asyncio.ensure_future` function
249 can be used instead::
250
251 async def coro():
252 ...
253
254 # In Python 3.7+
255 task = asyncio.create_task(coro())
256 ...
257
258 # This works in all Python versions but is less readable
259 task = asyncio.ensure_future(coro())
260 ...
261
Andrew Svetlovf74ef452017-12-15 07:04:38 +0200262 .. versionadded:: 3.7
263
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300264 .. versionchanged:: 3.8
265 Added the ``name`` parameter.
266
Victor Stinnerea3183f2013-12-03 01:08:00 +0100267
Yury Selivanov3faaa882018-09-14 13:32:07 -0700268Sleeping
269========
Andrew Svetlovf1240162016-01-11 14:40:35 +0200270
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100271.. coroutinefunction:: sleep(delay, result=None, \*, loop=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100272
Yury Selivanov3faaa882018-09-14 13:32:07 -0700273 Block for *delay* seconds.
274
275 If *result* is provided, it is returned to the caller
Eli Bendersky2d26af82014-01-20 06:59:23 -0800276 when the coroutine completes.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100277
Yury Selivanov47150392018-09-18 17:55:44 -0400278 The *loop* argument is deprecated and scheduled for removal
279 in Python 4.0.
280
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700281 .. _asyncio_example_sleep:
Victor Stinner45b27ed2014-02-01 02:36:43 +0100282
Yury Selivanov3faaa882018-09-14 13:32:07 -0700283 Example of coroutine displaying the current date every second
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400284 for 5 seconds::
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100285
Yury Selivanov3faaa882018-09-14 13:32:07 -0700286 import asyncio
287 import datetime
Victor Stinnerea3183f2013-12-03 01:08:00 +0100288
Yury Selivanov3faaa882018-09-14 13:32:07 -0700289 async def display_date():
290 loop = asyncio.get_running_loop()
291 end_time = loop.time() + 5.0
292 while True:
293 print(datetime.datetime.now())
294 if (loop.time() + 1.0) >= end_time:
295 break
296 await asyncio.sleep(1)
297
298 asyncio.run(display_date())
299
300
301Running Tasks Concurrently
302==========================
303
Yury Selivanove247b462018-09-20 12:43:59 -0400304.. awaitablefunction:: gather(\*aws, loop=None, return_exceptions=False)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700305
Yury Selivanove247b462018-09-20 12:43:59 -0400306 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400307 sequence *concurrently*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700308
Yury Selivanove247b462018-09-20 12:43:59 -0400309 If any awaitable in *aws* is a coroutine, it is automatically
Yury Selivanov47150392018-09-18 17:55:44 -0400310 scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700311
Yury Selivanov47150392018-09-18 17:55:44 -0400312 If all awaitables are completed successfully, the result is an
313 aggregate list of returned values. The order of result values
Yury Selivanove247b462018-09-20 12:43:59 -0400314 corresponds to the order of awaitables in *aws*.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700315
Yury Selivanov47150392018-09-18 17:55:44 -0400316 If *return_exceptions* is ``True``, exceptions are treated the
317 same as successful results, and aggregated in the result list.
318 Otherwise, the first raised exception is immediately propagated
319 to the task that awaits on ``gather()``.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700320
Yury Selivanov47150392018-09-18 17:55:44 -0400321 If ``gather`` is *cancelled*, all submitted awaitables
Yury Selivanov3faaa882018-09-14 13:32:07 -0700322 (that have not completed yet) are also *cancelled*.
323
Yury Selivanove247b462018-09-20 12:43:59 -0400324 If any Task or Future from the *aws* sequence is *cancelled*, it is
Yury Selivanov47150392018-09-18 17:55:44 -0400325 treated as if it raised :exc:`CancelledError` -- the ``gather()``
326 call is **not** cancelled in this case. This is to prevent the
327 cancellation of one submitted Task/Future to cause other
328 Tasks/Futures to be cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700329
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700330 .. _asyncio_example_gather:
331
Yury Selivanov3faaa882018-09-14 13:32:07 -0700332 Example::
333
334 import asyncio
335
336 async def factorial(name, number):
337 f = 1
338 for i in range(2, number + 1):
339 print(f"Task {name}: Compute factorial({i})...")
340 await asyncio.sleep(1)
341 f *= i
342 print(f"Task {name}: factorial({number}) = {f}")
343
344 async def main():
Yury Selivanov47150392018-09-18 17:55:44 -0400345 # Schedule three calls *concurrently*:
Yury Selivanov3faaa882018-09-14 13:32:07 -0700346 await asyncio.gather(
347 factorial("A", 2),
348 factorial("B", 3),
349 factorial("C", 4),
Miguel Ángel García9c53fa62018-09-18 08:01:26 +0200350 )
Yury Selivanov3faaa882018-09-14 13:32:07 -0700351
352 asyncio.run(main())
353
354 # Expected output:
355 #
356 # Task A: Compute factorial(2)...
357 # Task B: Compute factorial(2)...
358 # Task C: Compute factorial(2)...
359 # Task A: factorial(2) = 2
360 # Task B: Compute factorial(3)...
361 # Task C: Compute factorial(3)...
362 # Task B: factorial(3) = 6
363 # Task C: Compute factorial(4)...
364 # Task C: factorial(4) = 24
365
Yury Selivanov47150392018-09-18 17:55:44 -0400366 .. versionchanged:: 3.7
367 If the *gather* itself is cancelled, the cancellation is
368 propagated regardless of *return_exceptions*.
369
Yury Selivanov3faaa882018-09-14 13:32:07 -0700370
371Shielding Tasks From Cancellation
372=================================
373
Yury Selivanove247b462018-09-20 12:43:59 -0400374.. awaitablefunction:: shield(aw, \*, loop=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700375
Yury Selivanov47150392018-09-18 17:55:44 -0400376 Protect an :ref:`awaitable object <asyncio-awaitables>`
377 from being :meth:`cancelled <Task.cancel>`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700378
Yury Selivanove247b462018-09-20 12:43:59 -0400379 *aw* can be a coroutine, a Task, or a Future-like object. If
380 *aw* is a coroutine it is automatically scheduled as a Task.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100381
382 The statement::
383
Andrew Svetlov88743422017-12-11 17:35:49 +0200384 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100385
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400386 is equivalent to::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100387
Andrew Svetlov88743422017-12-11 17:35:49 +0200388 res = await something()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100389
Yury Selivanov3faaa882018-09-14 13:32:07 -0700390 *except* that if the coroutine containing it is cancelled, the
391 Task running in ``something()`` is not cancelled. From the point
392 of view of ``something()``, the cancellation did not happen.
393 Although its caller is still cancelled, so the "await" expression
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400394 still raises a :exc:`CancelledError`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100395
Yury Selivanov3faaa882018-09-14 13:32:07 -0700396 If ``something()`` is cancelled by other means (i.e. from within
397 itself) that would also cancel ``shield()``.
398
399 If it is desired to completely ignore cancellation (not recommended)
400 the ``shield()`` function should be combined with a try/except
401 clause, as follows::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100402
403 try:
Andrew Svetlov88743422017-12-11 17:35:49 +0200404 res = await shield(something())
Victor Stinnerea3183f2013-12-03 01:08:00 +0100405 except CancelledError:
406 res = None
407
Yury Selivanov950204d2016-05-16 16:23:00 -0400408
Yury Selivanov3faaa882018-09-14 13:32:07 -0700409Timeouts
410========
411
Yury Selivanove247b462018-09-20 12:43:59 -0400412.. coroutinefunction:: wait_for(aw, timeout, \*, loop=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700413
Yury Selivanove247b462018-09-20 12:43:59 -0400414 Wait for the *aw* :ref:`awaitable <asyncio-awaitables>`
Yury Selivanov47150392018-09-18 17:55:44 -0400415 to complete with a timeout.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700416
Yury Selivanove247b462018-09-20 12:43:59 -0400417 If *aw* is a coroutine it is automatically scheduled as a Task.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700418
419 *timeout* can either be ``None`` or a float or int number of seconds
420 to wait for. If *timeout* is ``None``, block until the future
421 completes.
422
423 If a timeout occurs, it cancels the task and raises
424 :exc:`asyncio.TimeoutError`.
425
Yury Selivanov47150392018-09-18 17:55:44 -0400426 To avoid the task :meth:`cancellation <Task.cancel>`,
427 wrap it in :func:`shield`.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700428
429 The function will wait until the future is actually cancelled,
430 so the total wait time may exceed the *timeout*.
431
Yury Selivanove247b462018-09-20 12:43:59 -0400432 If the wait is cancelled, the future *aw* is also cancelled.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700433
Yury Selivanov47150392018-09-18 17:55:44 -0400434 The *loop* argument is deprecated and scheduled for removal
435 in Python 4.0.
436
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700437 .. _asyncio_example_waitfor:
438
Yury Selivanov3faaa882018-09-14 13:32:07 -0700439 Example::
440
441 async def eternity():
442 # Sleep for one hour
443 await asyncio.sleep(3600)
444 print('yay!')
445
446 async def main():
447 # Wait for at most 1 second
448 try:
449 await asyncio.wait_for(eternity(), timeout=1.0)
450 except asyncio.TimeoutError:
451 print('timeout!')
452
453 asyncio.run(main())
454
455 # Expected output:
456 #
457 # timeout!
458
459 .. versionchanged:: 3.7
Yury Selivanove247b462018-09-20 12:43:59 -0400460 When *aw* is cancelled due to a timeout, ``wait_for`` waits
461 for *aw* to be cancelled. Previously, it raised
Yury Selivanov3faaa882018-09-14 13:32:07 -0700462 :exc:`asyncio.TimeoutError` immediately.
463
464
465Waiting Primitives
466==================
467
Yury Selivanove247b462018-09-20 12:43:59 -0400468.. coroutinefunction:: wait(aws, \*, loop=None, timeout=None,\
Andrew Svetlovf1240162016-01-11 14:40:35 +0200469 return_when=ALL_COMPLETED)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100470
Yury Selivanove247b462018-09-20 12:43:59 -0400471 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400472 sequence concurrently and block until the condition specified
473 by *return_when*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100474
Yury Selivanove247b462018-09-20 12:43:59 -0400475 If any awaitable in *aws* is a coroutine, it is automatically
Yury Selivanov47150392018-09-18 17:55:44 -0400476 scheduled as a Task.
Victor Stinnerdb74d982014-06-10 11:16:05 +0200477
Yury Selivanov3faaa882018-09-14 13:32:07 -0700478 Returns two sets of Tasks/Futures: ``(done, pending)``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100479
Yury Selivanov47150392018-09-18 17:55:44 -0400480 The *loop* argument is deprecated and scheduled for removal
481 in Python 4.0.
482
Yury Selivanov3faaa882018-09-14 13:32:07 -0700483 *timeout* (a float or int), if specified, can be used to control
484 the maximum number of seconds to wait before returning.
485
486 Note that this function does not raise :exc:`asyncio.TimeoutError`.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400487 Futures or Tasks that aren't done when the timeout occurs are simply
Yury Selivanov3faaa882018-09-14 13:32:07 -0700488 returned in the second set.
489
490 *return_when* indicates when this function should return. It must
491 be one of the following constants:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100492
493 .. tabularcolumns:: |l|L|
494
495 +-----------------------------+----------------------------------------+
496 | Constant | Description |
497 +=============================+========================================+
498 | :const:`FIRST_COMPLETED` | The function will return when any |
499 | | future finishes or is cancelled. |
500 +-----------------------------+----------------------------------------+
501 | :const:`FIRST_EXCEPTION` | The function will return when any |
502 | | future finishes by raising an |
503 | | exception. If no future raises an |
504 | | exception then it is equivalent to |
505 | | :const:`ALL_COMPLETED`. |
506 +-----------------------------+----------------------------------------+
507 | :const:`ALL_COMPLETED` | The function will return when all |
508 | | futures finish or are cancelled. |
509 +-----------------------------+----------------------------------------+
510
Yury Selivanov3faaa882018-09-14 13:32:07 -0700511 Unlike :func:`~asyncio.wait_for`, ``wait()`` does not cancel the
512 futures when a timeout occurs.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100513
514 Usage::
515
Yury Selivanove247b462018-09-20 12:43:59 -0400516 done, pending = await asyncio.wait(aws)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100517
Victor Stinnerea3183f2013-12-03 01:08:00 +0100518
Yury Selivanove247b462018-09-20 12:43:59 -0400519.. function:: as_completed(aws, \*, loop=None, timeout=None)
Yury Selivanov3faaa882018-09-14 13:32:07 -0700520
Yury Selivanove247b462018-09-20 12:43:59 -0400521 Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
Yury Selivanov47150392018-09-18 17:55:44 -0400522 set concurrently. Return an iterator of :class:`Future` objects.
523 Each Future object returned represents the earliest result
524 from the set of the remaining awaitables.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700525
526 Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
527 all Futures are done.
528
529 Example::
530
Yury Selivanove247b462018-09-20 12:43:59 -0400531 for f in as_completed(aws):
Yury Selivanov47150392018-09-18 17:55:44 -0400532 earliest_result = await f
Yury Selivanov3faaa882018-09-14 13:32:07 -0700533 # ...
Victor Stinnerea3183f2013-12-03 01:08:00 +0100534
Victor Stinner3e09e322013-12-03 01:22:06 +0100535
Yury Selivanov3faaa882018-09-14 13:32:07 -0700536Scheduling From Other Threads
537=============================
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100538
Yury Selivanov3faaa882018-09-14 13:32:07 -0700539.. function:: run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100540
Yury Selivanov3faaa882018-09-14 13:32:07 -0700541 Submit a coroutine to the given event loop. Thread-safe.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100542
Yury Selivanov47150392018-09-18 17:55:44 -0400543 Return a :class:`concurrent.futures.Future` to wait for the result
544 from another OS thread.
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100545
Yury Selivanov3faaa882018-09-14 13:32:07 -0700546 This function is meant to be called from a different OS thread
547 than the one where the event loop is running. Example::
Victor Stinner72dcb0a2015-04-03 17:08:19 +0200548
Yury Selivanov3faaa882018-09-14 13:32:07 -0700549 # Create a coroutine
550 coro = asyncio.sleep(1, result=3)
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500551
Yury Selivanov3faaa882018-09-14 13:32:07 -0700552 # Submit the coroutine to a given loop
553 future = asyncio.run_coroutine_threadsafe(coro, loop)
Victor Stinner1ad5afc2014-01-30 00:18:50 +0100554
Yury Selivanov3faaa882018-09-14 13:32:07 -0700555 # Wait for the result with an optional timeout argument
556 assert future.result(timeout) == 3
557
558 If an exception is raised in the coroutine, the returned Future
559 will be notified. It can also be used to cancel the task in
560 the event loop::
561
562 try:
563 result = future.result(timeout)
564 except asyncio.TimeoutError:
565 print('The coroutine took too long, cancelling the task...')
566 future.cancel()
567 except Exception as exc:
568 print('The coroutine raised an exception: {!r}'.format(exc))
569 else:
570 print('The coroutine returned: {!r}'.format(result))
571
572 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
573 section of the documentation.
574
575 Unlike other asyncio functions this functions requires the *loop*
576 argument to be passed explicitly.
577
578 .. versionadded:: 3.5.1
579
580
581Introspection
582=============
583
584
585.. function:: current_task(loop=None)
586
587 Return the currently running :class:`Task` instance, or ``None`` if
588 no task is running.
589
590 If *loop* is ``None`` :func:`get_running_loop` is used to get
591 the current loop.
592
593 .. versionadded:: 3.7
594
595
596.. function:: all_tasks(loop=None)
597
598 Return a set of not yet finished :class:`Task` objects run by
599 the loop.
600
601 If *loop* is ``None``, :func:`get_running_loop` is used for getting
602 current loop.
603
604 .. versionadded:: 3.7
605
606
607Task Object
608===========
609
610.. class:: Task(coro, \*, loop=None, name=None)
611
612 A :class:`Future`-like object that wraps a Python
613 :ref:`coroutine <coroutine>`. Not thread-safe.
614
615 Tasks are used to run coroutines in event loops.
616 If a coroutine awaits on a Future, the Task suspends
617 the execution of the coroutine and waits for the completion
618 of the Future. When the Future is *done*, the execution of
619 the wrapped coroutine resumes.
620
621 Event loops use cooperative scheduling: an event loop runs
622 one Task at a time. While a Task awaits for the completion of a
623 Future, the event loop runs other Tasks, callbacks, or performs
624 IO operations.
625
626 Use the high-level :func:`asyncio.create_task` function to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400627 Tasks, or the low-level :meth:`loop.create_task` or
628 :func:`ensure_future` functions. Manual instantiation of Tasks
629 is discouraged.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700630
631 To cancel a running Task use the :meth:`cancel` method. Calling it
632 will cause the Task to throw a :exc:`CancelledError` exception into
633 the wrapped coroutine. If a coroutine is awaiting on a Future
634 object during cancellation, the Future object will be cancelled.
635
636 :meth:`cancelled` can be used to check if the Task was cancelled.
637 The method returns ``True`` if the wrapped coroutine did not
638 suppress the :exc:`CancelledError` exception and was actually
639 cancelled.
640
641 :class:`asyncio.Task` inherits from :class:`Future` all of its
642 APIs except :meth:`Future.set_result` and
643 :meth:`Future.set_exception`.
644
645 Tasks support the :mod:`contextvars` module. When a Task
646 is created it copies the current context and later runs its
647 coroutine in the copied context.
Elvis Pranskevichuse2b340a2018-05-29 17:31:01 -0400648
649 .. versionchanged:: 3.7
Yury Selivanov3faaa882018-09-14 13:32:07 -0700650 Added support for the :mod:`contextvars` module.
651
652 .. versionchanged:: 3.8
653 Added the ``name`` parameter.
654
655 .. method:: cancel()
656
657 Request the Task to be cancelled.
658
659 This arranges for a :exc:`CancelledError` exception to be thrown
660 into the wrapped coroutine on the next cycle of the event loop.
661
662 The coroutine then has a chance to clean up or even deny the
663 request by suppressing the exception with a :keyword:`try` ...
664 ... ``except CancelledError`` ... :keyword:`finally` block.
665 Therefore, unlike :meth:`Future.cancel`, :meth:`Task.cancel` does
666 not guarantee that the Task will be cancelled, although
667 suppressing cancellation completely is not common and is actively
668 discouraged.
669
Yury Selivanov7372c3b2018-09-14 15:11:24 -0700670 .. _asyncio_example_task_cancel:
671
Yury Selivanov3faaa882018-09-14 13:32:07 -0700672 The following example illustrates how coroutines can intercept
673 the cancellation request::
674
675 async def cancel_me():
676 print('cancel_me(): before sleep')
677
678 try:
679 # Wait for 1 hour
680 await asyncio.sleep(3600)
681 except asyncio.CancelledError:
682 print('cancel_me(): cancel sleep')
683 raise
684 finally:
685 print('cancel_me(): after sleep')
686
687 async def main():
688 # Create a "cancel_me" Task
689 task = asyncio.create_task(cancel_me())
690
691 # Wait for 1 second
692 await asyncio.sleep(1)
693
694 task.cancel()
695 try:
696 await task
697 except asyncio.CancelledError:
698 print("main(): cancel_me is cancelled now")
699
700 asyncio.run(main())
701
702 # Expected output:
703 #
704 # cancel_me(): before sleep
705 # cancel_me(): cancel sleep
706 # cancel_me(): after sleep
707 # main(): cancel_me is cancelled now
708
709 .. method:: cancelled()
710
711 Return ``True`` if the Task is *cancelled*.
712
713 The Task is *cancelled* when the cancellation was requested with
714 :meth:`cancel` and the wrapped coroutine propagated the
715 :exc:`CancelledError` exception thrown into it.
716
717 .. method:: done()
718
719 Return ``True`` if the Task is *done*.
720
721 A Task is *done* when the wrapped coroutine either returned
722 a value, raised an exception, or the Task was cancelled.
723
Yury Selivanove247b462018-09-20 12:43:59 -0400724 .. method:: result()
725
726 Return the result of the Task.
727
728 If the Task is *done*, the result of the wrapped coroutine
729 is returned (or if the coroutine raised an exception, that
730 exception is re-raised.)
731
732 If the Task has been *cancelled*, this method raises
733 a :exc:`CancelledError` exception.
734
735 If the Task's result isn't yet available, this method raises
736 a :exc:`InvalidStateError` exception.
737
738 .. method:: exception()
739
740 Return the exception of the Task.
741
742 If the wrapped coroutine raised an exception that exception
743 is returned. If the wrapped coroutine returned normally
744 this method returns ``None``.
745
746 If the Task has been *cancelled*, this method raises a
747 :exc:`CancelledError` exception.
748
749 If the Task isn't *done* yet, this method raises an
750 :exc:`InvalidStateError` exception.
751
752 .. method:: add_done_callback(callback, *, context=None)
753
754 Add a callback to be run when the Task is *done*.
755
756 This method should only be used in low-level callback-based code.
757
758 See the documentation of :meth:`Future.add_done_callback`
759 for more details.
760
761 .. method:: remove_done_callback(callback)
762
763 Remove *callback* from the callbacks list.
764
765 This method should only be used in low-level callback-based code.
766
767 See the documentation of :meth:`Future.remove_done_callback`
768 for more details.
769
Yury Selivanov3faaa882018-09-14 13:32:07 -0700770 .. method:: get_stack(\*, limit=None)
771
772 Return the list of stack frames for this Task.
773
774 If the wrapped coroutine is not done, this returns the stack
775 where it is suspended. If the coroutine has completed
776 successfully or was cancelled, this returns an empty list.
777 If the coroutine was terminated by an exception, this returns
778 the list of traceback frames.
779
780 The frames are always ordered from oldest to newest.
781
782 Only one stack frame is returned for a suspended coroutine.
783
784 The optional *limit* argument sets the maximum number of frames
785 to return; by default all available frames are returned.
786 The ordering of the returned list differs depending on whether
787 a stack or a traceback is returned: the newest frames of a
788 stack are returned, but the oldest frames of a traceback are
789 returned. (This matches the behavior of the traceback module.)
790
791 .. method:: print_stack(\*, limit=None, file=None)
792
793 Print the stack or traceback for this Task.
794
795 This produces output similar to that of the traceback module
796 for the frames retrieved by :meth:`get_stack`.
797
798 The *limit* argument is passed to :meth:`get_stack` directly.
799
800 The *file* argument is an I/O stream to which the output
801 is written; by default output is written to :data:`sys.stderr`.
802
803 .. method:: get_name()
804
805 Return the name of the Task.
806
807 If no name has been explicitly assigned to the Task, the default
808 asyncio Task implementation generates a default name during
809 instantiation.
810
811 .. versionadded:: 3.8
812
813 .. method:: set_name(value)
814
815 Set the name of the Task.
816
817 The *value* argument can be any object, which is then
818 converted to a string.
819
820 In the default Task implementation, the name will be visible
821 in the :func:`repr` output of a task object.
822
823 .. versionadded:: 3.8
824
825 .. classmethod:: all_tasks(loop=None)
826
827 Return a set of all tasks for an event loop.
828
829 By default all tasks for the current event loop are returned.
830 If *loop* is ``None``, the :func:`get_event_loop` function
831 is used to get the current loop.
832
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400833 This method is **deprecated** and will be removed in
Yury Selivanov3faaa882018-09-14 13:32:07 -0700834 Python 3.9. Use the :func:`all_tasks` function instead.
835
836 .. classmethod:: current_task(loop=None)
837
838 Return the currently running task or ``None``.
839
840 If *loop* is ``None``, the :func:`get_event_loop` function
841 is used to get the current loop.
842
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400843 This method is **deprecated** and will be removed in
Yury Selivanov3faaa882018-09-14 13:32:07 -0700844 Python 3.9. Use the :func:`current_task` function instead.
845
846
847.. _asyncio_generator_based_coro:
848
849Generator-based Coroutines
850==========================
851
852.. note::
853
854 Support for generator-based coroutines is **deprecated** and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400855 is scheduled for removal in Python 4.0.
Yury Selivanov3faaa882018-09-14 13:32:07 -0700856
857Generator-based coroutines predate async/await syntax. They are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400858Python generators that use ``yield from`` expressions to await
Yury Selivanov3faaa882018-09-14 13:32:07 -0700859on Futures and other coroutines.
860
861Generator-based coroutines should be decorated with
862:func:`@asyncio.coroutine <asyncio.coroutine>`, although this is not
863enforced.
864
865
866.. decorator:: coroutine
867
868 Decorator to mark generator-based coroutines.
869
870 This decorator enables legacy generator-based coroutines to be
871 compatible with async/await code::
872
873 @asyncio.coroutine
874 def old_style_coroutine():
875 yield from asyncio.sleep(1)
876
877 async def main():
878 await old_style_coroutine()
879
880 This decorator is **deprecated** and is scheduled for removal in
881 Python 4.0.
882
883 This decorator should not be used for :keyword:`async def`
884 coroutines.
885
886.. function:: iscoroutine(obj)
887
888 Return ``True`` if *obj* is a :ref:`coroutine object <coroutine>`.
889
890 This method is different from :func:`inspect.iscoroutine` because
891 it returns ``True`` for generator-based coroutines decorated with
892 :func:`@coroutine <coroutine>`.
893
894.. function:: iscoroutinefunction(func)
895
896 Return ``True`` if *func* is a :ref:`coroutine function
897 <coroutine>`.
898
899 This method is different from :func:`inspect.iscoroutinefunction`
900 because it returns ``True`` for generator-based coroutine functions
901 decorated with :func:`@coroutine <coroutine>`.