Sobes.tech
Junior — Middle

Python-da çoxlu iş parçacığından istifadə etmək, CPU-ya bağlı ağır hesablamaların yerinə yetirilməsində nəzərəçarpacaq sürətlənməyə səbəb olmur?

sobes.tech Süni İntellekt

AI-dan cavab

Python-un standart tətbiqində, CPython GIL (Global Interpreter Lock) istifadə edir — bu, interpretatorun qlobal kilididir və yalnız bir Python bayt kodunu eyni zamanda bir iş parçacığında icra etməyə imkan verir. Bu səbəbdən, çox iş parçacığı ilə işləmə (multithreading) CPU-ya bağlı ağır hesablamalarda performans artımı gətirmir, çünki iş parçacıqları həqiqətən çox nüvədə paralel şəkildə icra edilə bilməz.

Bu məhdudiyyəti aşmaq üçün istifadə olunur:

  • Çox prosesli işləmə (multiprocessing modulu), burada hər prosesin öz interpretatoru və GIL-i var.
  • Hesablamalar zamanı GIL-i azad edən C uzantılarından istifadə.
  • GIL olmadan işləyən alternativ Python tətbiqləri (məsələn, Jython, IronPython).

Paralel hesablamalar üçün multiprocessing istifadəsinə nümunə:

from multiprocessing import Pool

def heavy_calc(x):
    # CPU-ya bağlı ağır funksiya
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        results = p.map(heavy_calc, range(10))
    print(results)