Sobes.tech
Junior — Middle

Kokios metodikos yra įgyvendintos Python kalboje, kad atliekamos užduotys lygiagrečiai arba konkurencingai?

sobes.tech AI

Atsakymas iš AI

Python'e naudojami įvairūs požiūriai ir bibliotekos, skirtos vykdyti užduotis lygiagrečiai arba konkurencingai:

  1. threading modulis — norint sukurti gijas (threads). Tinka daug įvesties/išvesties operacijų turinčioms užduotims, tačiau dėl GIL nepagerina CPU-bound užduočių greičio.

  2. multiprocessing modulis — procesų kūrimui. Leidžia apeiti GIL ir efektyviai naudoti kelis CPU branduolius.

  3. asyncio modulis — asinchroninio programavimo naudojant korutinas. Gerai tinka daug įvesties/išvesties operacijų.

  4. Aukšto lygio bibliotekos:

    • concurrent.futures.ThreadPoolExecutor ir ProcessPoolExecutor — patogios sąsajos užduočių vykdymui gijuose ar procesuose.

Pavyzdys naudojant concurrent.futures:

from concurrent.futures import ThreadPoolExecutor

def užduotis(n):
    print(f"Užduotis {n} vykdoma")

with ThreadPoolExecutor(max_workers=3) as executor:
    for i in range(5):
        executor.submit(užduotis, i)

Pasirinkimas priklauso nuo užduoties tipo: CPU-bound — multiprocessing, I/O-bound — threading arba asyncio.