Junior — Middle
94
Python-да әртүрлі ағындар арасында ортақ жад бар ма және олардың жадпен бірлесіп жұмыс істеуі қалай жүзеге асырылады?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Python-да ағындар (threads) процестің жалпы жадысын бөліседі, яғни барлық ағындар бірдей жады объектілеріне қол жеткізе алады. Бұл оларға деректермен бірлесіп жұмыс істеуге мүмкіндік береді, көшірмелеусіз.
Алайда, Python-ның стандартты жүзеге асырылуында (CPython) Global Interpreter Lock (GIL) бар болғандықтан, бір уақытта тек бір ағын Python байт-кодын орындайды, бұл CPU-интенсивті тапсырмаларда параллелизмді шектейді.
Жалпы жадымен қауіпсіз жұмыс істеу үшін синхрондау механизмдері пайдаланылады, мысалы:
threading.Lock— ресурсқа бір уақытта қол жеткізуді болдырмайтын блокировка.threading.Event,Condition,Semaphore— күрделі үйлестіру үшін.
Lock қолданудың мысалы:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
for _ in range(100000):
with lock:
counter += 1
threads = [threading.Thread(target=increment) for _ in range(2)]
for t in threads:
t.start()
for t in threads:
t.join()
print(counter) # Күтілген нәтиже 200000
Осылайша, Python-да ағындар жалпы жадыны бөліседі, бірақ дұрыс бірлескен жұмыс үшін синхрондау қажет.