File size: 3,762 Bytes
9273228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# `!asyncio`{.interpreted-text role="mod"} \-\-- Asynchronous I/O

::: {.module synopsis="Asynchronous I/O."}
asyncio
:::

------------------------------------------------------------------------

::: sidebar
**Hello World!**

    import asyncio

    async def main():
        print('Hello ...')
        await asyncio.sleep(1)
        print('... World!')

    asyncio.run(main())
:::

asyncio is a library to write **concurrent** code using the **async/await** syntax.

asyncio is used as a foundation for multiple Python asynchronous frameworks that provide high-performance network and web-servers, database connection libraries, distributed task queues, etc.

asyncio is often a perfect fit for IO-bound and high-level **structured** network code.

::: seealso

`a-conceptual-overview-of-asyncio`{.interpreted-text role="ref"}

:   Explanation of the fundamentals of asyncio.
:::

asyncio provides a set of **high-level** APIs to:

- `run Python coroutines <coroutine>`{.interpreted-text role="ref"} concurrently and have full control over their execution;
- perform `network IO and IPC <asyncio-streams>`{.interpreted-text role="ref"};
- control `subprocesses <asyncio-subprocess>`{.interpreted-text role="ref"};
- distribute tasks via `queues <asyncio-queues>`{.interpreted-text role="ref"};
- `synchronize <asyncio-sync>`{.interpreted-text role="ref"} concurrent code;

Additionally, there are **low-level** APIs for *library and framework developers* to:

- create and manage `event loops <asyncio-event-loop>`{.interpreted-text role="ref"}, which provide asynchronous APIs for `networking <loop_create_server>`{.interpreted-text role="ref"}, running `subprocesses <loop_subprocess_exec>`{.interpreted-text role="ref"}, handling `OS signals <loop_add_signal_handler>`{.interpreted-text role="ref"}, etc;
- implement efficient protocols using `transports <asyncio-transports-protocols>`{.interpreted-text role="ref"};
- `bridge <asyncio-futures>`{.interpreted-text role="ref"} callback-based libraries and code with async/await syntax.

::: availability
not WASI.

This module does not work or is not available on WebAssembly. See `wasm-availability`{.interpreted-text role="ref"} for more information.
:::

::: {#asyncio-cli}
**asyncio REPL**
:::

You can experiment with an `asyncio` concurrent context in the `REPL`{.interpreted-text role="term"}:

``` pycon
$ python -m asyncio
asyncio REPL ...
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
>>> await asyncio.sleep(10, result='hello')
'hello'
```

This REPL provides limited compatibility with `PYTHON_BASIC_REPL`{.interpreted-text role="envvar"}. It is recommended that the default REPL is used for full functionality and the latest features.

::: audit-event
cpython.run_stdin \"\" \"\"
:::

::: versionchanged
3.12.5 (also 3.11.10, 3.10.15, 3.9.20, and 3.8.20) Emits audit events.
:::

::: versionchanged
3.13 Uses PyREPL if possible, in which case `PYTHONSTARTUP`{.interpreted-text role="envvar"} is also executed. Emits audit events.
:::

**Reference**

::: {.toctree caption="High-level APIs" maxdepth="1"}
asyncio-runner.rst asyncio-task.rst asyncio-stream.rst asyncio-sync.rst asyncio-subprocess.rst asyncio-queue.rst asyncio-exceptions.rst asyncio-graph.rst
:::

::: {.toctree caption="Low-level APIs" maxdepth="1"}
asyncio-eventloop.rst asyncio-future.rst asyncio-protocol.rst asyncio-policy.rst asyncio-platforms.rst asyncio-extending.rst
:::

::: {.toctree caption="Guides and Tutorials" maxdepth="1"}
asyncio-api-index.rst asyncio-llapi-index.rst asyncio-dev.rst
:::

:::: note
::: title
Note
:::

The source code for asyncio can be found in `Lib/asyncio/`{.interpreted-text role="source"}.
::::