18.5. asyncio – Asynchronous I/O, event loop, coroutines and tasks
The asyncio package has been included in the standard library on a
provisional basis. Backwards incompatible
changes (up to and including removal of the module) may occur if deemed
necessary by the core developers.
Source code: Lib/asyncio/
This module provides infrastructure for writing single-threaded concurrent
code using coroutines, multiplexing I/O access over sockets and other
resources, running network clients and servers, and other related primitives.
Here is a more detailed list of the package contents:
- a pluggable event loop with various system-specific
- transport and protocol abstractions
(similar to those in Twisted);
- concrete support for TCP, UDP, SSL, subprocess pipes, delayed calls, and
others (some may be system-dependent);
- a Future class that mimics the one in the concurrent.futures
module, but adapted for use with the event loop;
- coroutines and tasks based on yield from (PEP 380), to help write
concurrent code in a sequential fashion;
- cancellation support for Futures and coroutines;
- synchronization primitives for use between coroutines in
a single thread, mimicking those in the threading module;
- an interface for passing work off to a threadpool, for times when
you absolutely, positively have to use a library that makes blocking
Asynchronous programming is more complex than classical “sequential”
programming: see the Develop with asyncio page which lists
common traps and explains how to avoid them. Enable the debug mode during development to detect common issues.
Table of contents:
The asyncio module was designed in PEP 3156. For a
motivational primer on transports and protocols, see PEP 3153.