We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Talks - Arthur Pastel: Demystifying AsyncIO: Building Your Own Event Loop in Python
Learn how Python's AsyncIO works under the hood through a step-by-step implementation of an event loop, with insights into async programming & concurrency patterns.
-
AsyncIO enables concurrent operations by allowing other tasks to run while waiting for I/O operations, without blocking execution
-
The event loop is the core component that:
- Schedules and manages callbacks
- Handles task execution timing
- Coordinates I/O operations through selectors
- Maps file descriptors to callbacks
-
Key AsyncIO components:
- Futures - Objects representing eventual results
- Tasks - Link between coroutines and futures
- Coroutines - Functions that can be suspended/resumed
- Selectors - Handle multiple I/O operations efficiently
-
Task scheduling behaviors:
- Tasks don’t start executing until explicitly awaited
- Only run until first await statement when created
- Can be canceled if registered in event loop
- Can be scheduled for future execution with call_later()
-
Testing async code considerations:
- Results may not be deterministic due to parallel execution
- Pytest fixtures available for event loop handling
- Need to handle task cancellation properly
- Important to manage proper task cleanup
-
Performance aspects:
- Alternative implementations like uvloop can be 2-4x faster
- GIL prevents true parallel execution of CPU-bound tasks
- I/O operations can run concurrently
- Event loop implementation choice impacts application performance
-
Error handling:
- Task cancellation requires proper exception handling
- Need to handle cleanup of scheduled tasks during shutdown
- Important to gracefully close connections and tasks
-
Best practices:
- Use async context managers when possible
- Leverage async iterators for lazy fetching
- Consider task scheduling timing carefully
- Properly await tasks for completion