Most Python developers use asyncio through async and await, but beneath that syntax lies a layered networking and scheduling system with several very different APIs.
In this talk, we will open up the asyncio event loop and examine how its main pieces fit together. We will start with low-level primitives such as call_soon(), timers, add_reader(), and add_writer(). From there, we will move to the Transport and Protocol APIs, and finally to the higher-level streams interface built on top of them.
We will compare these layers and discuss the trade-offs between convenience, portability, control, and performance. We will also look at buffered protocols, event-loop exception handling, debug mode, and the role of contextvars in asynchronous applications.
Finally, we will clarify the reactor and proactor models used by different event-loop implementations, including which APIs are available on different platforms and why those differences matter.
This talk is intended for Python developers who already use asyncio but want a clearer mental model of what the event loop actually does. You will leave better equipped to choose the right abstraction level, understand asyncio documentation, and debug unexpected behavior in asynchronous applications.
