Junior — Middle
Miért nem eredményez észrevehető gyorsulást a Python több szálának használata a CPU-igényes számítások végrehajtásában?
sobes.tech MI
Válasz az MI-től
A Python szabványos implementációjában, a CPython használja a GIL-t (Global Interpreter Lock), ami egy globális zár a futtatóban, és lehetővé teszi, hogy egyszerre csak egy Python bytekód fusson egy szálon. Emiatt a több szálas feldolgozás nem hoz teljesítménynövekedést CPU-intenzív számítások esetén, mivel a szálak nem tudnak valóban párhuzamosan futni több magon.
Ennek a korlátozásnak a kiküszöbölésére a következőket használják:
- Többfolyamatos feldolgozás (multiprocessing modul), ahol minden folyamatnak saját futtatója és GIL-je van.
- C kiterjesztések használata, amelyek felszabadítják a GIL-t a számítások során.
- Alternatív Python-implementációk GIL nélkül (pl. Jython, IronPython).
Példa a multiprocessing használatára párhuzamos számításokhoz:
from multiprocessing import Pool
def heavy_calc(x):
# Egy CPU-hoz kötött nehéz függvény
return x * x
if __name__ == '__main__':
with Pool(4) as p:
results = p.map(heavy_calc, range(10))
print(results)