Python maakt gebruik van een mechanisme genaamd de Global Interpreter Lock, afgekort als GIL, dat slechts één reeks bytecode-instructies (thread) tegelijkertijd toestaat. De GIL heeft belangrijke voordelen, zoals het waarborgen van thread-veiligheid, het verbeteren van de prestaties van single-threaded programma’s en het vereenvoudigen van de integratie van niet-thread-safe C-bibliotheken met Python.
Tegelijkertijd vormt de GIL een belemmering voor multithreaded programma’s die zijn ontworpen om meerdere taken gelijktijdig uit te voeren. Hierdoor kunnen moderne multicore processoren, die in staat zijn om meerdere taken parallel uit te voeren, niet optimaal worden benut.
Er is veel discussie geweest over het verwijderen van de GIL, maar er is geen haalbare oplossing gevonden vanwege de sterke koppeling van de GIL met veel Python-functies, -modules en -pakketten. Bovendien zou het verwijderen van de GIL de prestaties van software met een single-threaded architectuur verslechteren.
Om de beperkingen van de GIL te omzeilen, kan het multiprocessing-pakket van Python worden gebruikt. Dit pakket maakt het mogelijk om talrijke subprocessen in plaats van threads te gebruiken. In dit scenario heeft elk proces zijn eigen interpreter en geheugenruimte, terwijl het besturingssysteem de parallelle uitvoering van opdrachten over verschillende CPU-kernen plant. Hoewel nog steeds aparte threads worden gebruikt voor elk proces, delen parallel uitgevoerde processen niet dezelfde geheugenruimte, in tegenstelling tot bij multithreading.
Echter, parallellisme heeft één groot nadeel: het vergt veel geheugenruimte.