Introduction

When I started learning concurrency in Python, the first thing that confused me was why there are so many different ways to execute multiple tasks.

We have threading, multiprocessing, and asyncio.

At first, they all seemed to solve the same problem: doing multiple things at once.

But then I realized that they don't solve exactly the same problem.