Sobes.tech
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)