Multithreading – Python and GIL
In Python there is, a global lock that prevents multiple threads from executing native bytecode at once. This lock is required, since the memory management of CPython (the native implementation of Python) is not thread-safe.
This lock is called Global Interpreter Lock or just GIL.
Python cannot execute bytecode operations concurrently on CPUs due to the GIL. Hence, Python becomes nearly unsuitable for the following cases:
When the program depends on a number of heavy bytecode operations, which it wants to run concurrently
When the program uses multithreading to utilize the full power of multiple CPU cores on a single machine
I/O calls and long-running operations typically occur outside the GIL. So multithreading is efficient in Python only when it involves some amount of I/O or such operations- such as image processing.
In such cases, scaling your program to concurrently scale beyond a single process becomes a handy approach. Python makes this possible via its multiprocessing...