Skip to content


There are a lot of tutorials that teach asynchronous programming in Python. I am grateful for these tutorials, most of which are freely available online. However, all of these tutorials have the same didactic style – they present the material in chronological order using outdated terminology.

This didactic style makes it unreasonably difficult to learn async Python programming. I found the tutorials on async programming for other programming languages to be more informative than the ones for Python. This made me realize that async programming in Python could be made quite straightforward only if it was taught in a different way. That's what led me to design this self-study course on Asynchronous Python Programming.

Course Requirements

  • Proficiency in Python syntax
  • Basic knowledge of Python data structures
  • Patience, lots of patience

Time Commitment

This course is divided into 4 chapters, shown as top-level tabs. Depending upon your previous experience with async programming (in any language), it may take you anywhere between 2 hours to 2 days to finish the material.


We use a different terminology than what is commonly used. This is intentional. Our terminology provides a sharp separation between closely related but different concepts that are otherwise lumped together.

Python Version

This course describes Python 3.8.5. This course almost assuredly is in conflict with earlier versions of Python.

The general concepts in this course should hold for all later versions of Python. Since Python async syntax is still being refined, some of the specific examples in this course may not work as described. Please let me know and I will update them.

Let's Begin

We'll start with some commentary on why async Python programming is difficult to learn or teach.

Last update: 2021-02-03