Назад к вопросам
Junior — Middle
68
Какими методами и инструментами вы использовали для предотвращения условий гонки при разработке на Python?
Компании, где спрашивали
Код Открытия
Ответ от нейросети
sobes.tech AI
Для предотвращения условий гонки (race conditions) в Python применяются различные методы синхронизации, особенно при работе с потоками или процессами:
- Lock (блокировка) из модуля
threading— позволяет ограничить доступ к критической секции кода одному потоку. - RLock (рекурсивная блокировка) — позволяет одному потоку многократно захватывать блокировку.
- Semaphore — ограничивает количество потоков, которые могут одновременно выполнять определённый участок кода.
- Queue — потокобезопасная очередь, которая помогает безопасно обмениваться данными между потоками.
Пример использования Lock для защиты общего ресурса:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
with lock:
temp = counter
temp += 1
counter = temp
threads = [threading.Thread(target=increment) for _ in range(1000)]
for t in threads:
t.start()
for t in threads:
t.join()
print(counter) # Ожидается 1000
Без блокировки значение counter могло бы быть меньше из-за одновременного доступа и перезаписи.