Sobes.tech
Back to questions
Junior — Middle
68

Как вы выбираете условия для переключения исполнения между потоками?

Answer from AI

sobes.tech AI

В Python переключение исполнения между потоками происходит за счёт планировщика потоков операционной системы и механизма GIL (Global Interpreter Lock). Условия для переключения обычно выбираются на уровне блокировок, ожиданий ввода-вывода или явных вызовов, например, time.sleep(), threading.Event().wait(), или при освобождении GIL.

Чтобы управлять переключением, используют синхронизационные примитивы из модуля threading:

  • Lock / RLock — блокируют доступ к ресурсу, переключение происходит, когда поток ждёт освобождения блокировки.
  • Event — поток ждёт события, переключение происходит при его установке.
  • Condition — позволяет потокам ждать определённого условия.

Пример использования Event для переключения исполнения:

import threading
import time

event = threading.Event()

def worker():
    print('Ждём события...')
    event.wait()  # переключение, пока событие не установлено
    print('Событие произошло! Продолжаем работу.')

thread = threading.Thread(target=worker)
thread.start()

time.sleep(2)
print('Устанавливаем событие')
event.set()  # переключение к потоку worker
thread.join()

Таким образом, условия для переключения выбираются исходя из необходимости синхронизации и ожидания определённых событий или ресурсов.