18.5. asyncio – Asynchronous I/O, event loop, coroutines and tasks
Note
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.
New in version 3.4.
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 implementations;
- 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 I/O calls.
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:
- 18.5.1. Base Event Loop
- 18.5.1.1. Run an event loop
- 18.5.1.2. Calls
- 18.5.1.3. Delayed calls
- 18.5.1.4. Tasks
- 18.5.1.5. Creating connections
- 18.5.1.6. Creating listening connections
- 18.5.1.7. Watch file descriptors
- 18.5.1.8. Low-level socket operations
- 18.5.1.9. Resolve host name
- 18.5.1.10. Connect pipes
- 18.5.1.11. UNIX signals
- 18.5.1.12. Executor
- 18.5.1.13. Error Handling API
- 18.5.1.14. Debug mode
- 18.5.1.15. Server
- 18.5.1.16. Handle
- 18.5.1.17. Event loop examples
- 18.5.2. Event loops
- 18.5.3. Tasks and coroutines
- 18.5.4. Transports and protocols (low-level API)
- 18.5.5. Streams (high-level API)
- 18.5.6. Subprocess
- 18.5.7. Synchronization primitives
- 18.5.8. Queues
- 18.5.9. Develop with asyncio
- 18.5.9.1. Debug mode of asyncio
- 18.5.9.2. Cancellation
- 18.5.9.3. Concurrency and multithreading
- 18.5.9.4. Handle blocking functions correctly
- 18.5.9.5. Logging
- 18.5.9.6. Detect coroutine objects never scheduled
- 18.5.9.7. Detect exceptions never consumed
- 18.5.9.8. Chain coroutines correctly
- 18.5.9.9. Pending task destroyed
- 18.5.9.10. Close transports and event loops