18.5. asyncio – Asynchronous I/O, event loop, coroutines and tasks — Python 3.4.0 documentation

### Navigation

- index
- modules |
- next |
- previous |
- Python »
- 3.4.0 Documentation »
- The Python Standard Library »
- 18. Interprocess Communication and Networking »

# 18.5. `asyncio` – Asynchronous I/O, event loop, coroutines and tasks

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 `Future`s 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.

Table of content:

- 18.5.1. Event loops
  - 18.5.1.1. Event loop policies and the default policy
  - 18.5.1.2. Event loop functions
  - 18.5.1.3. Event loop policy interface
  - 18.5.1.4. Access to the global loop policy
  - 18.5.1.5. Run an event loop
  - 18.5.1.6. Calls
  - 18.5.1.7. Delayed calls
  - 18.5.1.8. Creating connections
  - 18.5.1.9. Creating listening connections
  - 18.5.1.10. Watch file descriptors
  - 18.5.1.11. Low-level socket operations
  - 18.5.1.12. Resolve host name
  - 18.5.1.13. Running subprocesses
  - 18.5.1.14. UNIX signals
  - 18.5.1.15. Executor
  - 18.5.1.16. Error Handling API
  - 18.5.1.17. Debug mode
  - 18.5.1.18. Server
  - 18.5.1.19. Handle
  - 18.5.1.20. Example: Hello World (callback)
  - 18.5.1.21. Example: Set signal handlers for SIGINT and SIGTERM
- 18.5.2. Tasks and coroutines
  - 18.5.2.1. Coroutines
    - 18.5.2.1.1. Example: “Hello World” coroutine
    - 18.5.2.1.2. Example: Chain coroutines
  - 18.5.2.2. InvalidStateError
  - 18.5.2.3. Future
    - 18.5.2.3.1. Example: Future with run_until_complete()
    - 18.5.2.3.2. Example: Future with run_forever()
  - 18.5.2.4. Task
    - 18.5.2.4.1. Example: Parallel execution of tasks
  - 18.5.2.5. Task functions
- 18.5.3. Transports and protocols (low-level API)
  - 18.5.3.1. Transports
    - 18.5.3.1.1. BaseTransport
    - 18.5.3.1.2. ReadTransport
    - 18.5.3.1.3. WriteTransport
    - 18.5.3.1.4. DatagramTransport
    - 18.5.3.1.5. BaseSubprocessTransport
  - 18.5.3.2. Protocols
    - 18.5.3.2.1. Protocol classes
    - 18.5.3.2.2. Connection callbacks
    - 18.5.3.2.3. Streaming protocols
    - 18.5.3.2.4. Datagram protocols
    - 18.5.3.2.5. Flow control callbacks
    - 18.5.3.2.6. Coroutines and protocols
  - 18.5.3.3. Protocol example: TCP echo server and client
    - 18.5.3.3.1. Echo client
    - 18.5.3.3.2. Echo server
- 18.5.4. Streams (high-level API)
  - 18.5.4.1. Stream functions
  - 18.5.4.2. StreamReader
  - 18.5.4.3. StreamWriter
  - 18.5.4.4. StreamReaderProtocol
  - 18.5.4.5. IncompleteReadError
  - 18.5.4.6. Example
- 18.5.5. Subprocess
  - 18.5.5.1. Create a subprocess
  - 18.5.5.2. Constants
  - 18.5.5.3. Process
  - 18.5.5.4. Example
- 18.5.6. Synchronization primitives
  - 18.5.6.1. Locks
    - 18.5.6.1.1. Lock
    - 18.5.6.1.2. Event
    - 18.5.6.1.3. Condition
  - 18.5.6.2. Semaphores
    - 18.5.6.2.1. Semaphore
    - 18.5.6.2.2. BoundedSemaphore
  - 18.5.6.3. Queues
    - 18.5.6.3.1. Queue
    - 18.5.6.3.2. PriorityQueue
    - 18.5.6.3.3. LifoQueue
    - 18.5.6.3.4. JoinableQueue
    - 18.5.6.3.5. Exceptions
- 18.5.7. Develop with asyncio
  - 18.5.7.1. Concurrency and multithreading
  - 18.5.7.2. Handle blocking functions correctly
  - 18.5.7.3. Logging
  - 18.5.7.4. Detect coroutine objects never scheduled
  - 18.5.7.5. Detect exceptions not consumed
  - 18.5.7.6. Chain coroutines correctly

See also

The `asyncio` module was designed in the PEP 3156. For a motivational primer on transports and protocols, see PEP 3153.

### Navigation

- index
- modules |
- next |
- previous |
- Python »
- 3.4.0 Documentation »
- The Python Standard Library »
- 18. Interprocess Communication and Networking »