Junior — Middle
Millised meetodid on Pythonis rakendatud ülesannete paralleelseks või konkurentsivõimeliseks täitmiseks?
sobes.tech AI
Vastus AI-lt
Pythonis kasutatakse erinevaid lähenemisviise ja teeke ülesannete paralleelseks või konkurentsivõimeliseks täitmiseks:
-
threadingmoodul — niitide (threads) loomiseks. Sobib paljude sisendi/väljundi operatsioonidega ülesannete jaoks, kuid GIL tõttu ei kiirenda CPU-põhiseid ülesandeid. -
multiprocessingmoodul — protsesside loomiseks. Võimaldab GIL-i mööda minna ja tõhusalt kasutada mitut CPU tuuma. -
asynciomoodul — asünkroonseks programmeerimiseks kasutades korutine. Hea paljude sisendi/väljundi operatsioonide jaoks. -
Kõrgema taseme teegid:
concurrent.futures.ThreadPoolExecutorjaProcessPoolExecutor— mugavad liidesed ülesannete käivitamiseks niitides või protsessides.
Näide concurrent.futures kasutamisest:
from concurrent.futures import ThreadPoolExecutor
def ülesanne(n):
print(f"Ülesanne {n} täidetakse")
with ThreadPoolExecutor(max_workers=3) as executor:
for i in range(5):
executor.submit(ülesanne, i)
Meetodi valik sõltub ülesande tüübist: CPU-bound — multiprocessing, I/O-bound — threading või asyncio.