Sobes.tech
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-да ағындар жалпы жадыны бөліседі, бірақ дұрыс бірлескен жұмыс үшін синхрондау қажет.