I've written this article because despite asyncio blowing up the Python world, and despite pyserial (the de-facto serial library) providing an asyncio-compatible module, there is basically nothing written about how to actually use these two things together. Give it permission to do something interesting when it would otherwise be dying of boredom. Furthermore, a read operation that times out will block the whole time it's waiting. Your processor is running at several GHz. Lots of serial devices still default to a baud rate (bitrate) of 9600, or ~830us per character (byte). For example, every single piece of equipment in my experiment uses ASCII-over-serial. In my experience, ASCII-over-serial is the JSON of the scientific world in the sense that just about any piece of equipment you buy will have some sort of ASCII/serial support. If you're working in an industrial, IoT, or scientific setting you might find yourself communicating with various devices via serial protocols. Lately I've been thinking about how I would do a modernized rewrite in Python. The old code is brittle, difficult to debug, and generally makes it too much of a pain to add features unless absolutely necessary. Most of the code that runs my experiment is written in a proprietary scripting language that I guarantee none of you have ever heard of. I'm an experimental physicist, so part of my job entails writing software that orchestrates equipment in my experiment. Using Python's asyncio with serial devices