ThreadPools
Threads have been, historically, the most common way to achieve concurrency within software.
In theory, when the system allows, these threads can achieve real parallelism, but in Python, the Global Interpreter Lock (GLI) doesn't allow threads actually to leverage multicore systems, as the lock will allow a single Python operation to proceed at any given time.
For this reason, threads are frequently undervalued in Python, but in fact, even when the GIL is involved, they can be a very convenient solution to run I/O operations concurrently.
While using coroutines, we would need a run
loop and some custom code to ensure that the I/O operation proceeds in parallel. Using threads, we can run any kind of function within a thread and, if that function does some kind of I/O, such as reading from a socket or from a disk, the other threads will proceed in the meantime.
One of the major drawbacks of threads is the cost of spawning them. That's frequently stated as one of the reasons why coroutines...