Встречается на собеседованиях • сегодня

Как боролся с гонкой данных в Python

Для борьбы с гонкой данных в Python чаще всего используют механизмы синхронизации из модуля threading:

  1. Lock (блокировки) - базовый примитив:
python
from threading import Lock

lock = Lock()
shared_data = 0

def increment():
    global shared_data
    with lock:
        shared_data += 1
  1. RLock (реентерабельные блокировки) - позволяют одному потоку захватывать блокировку несколько раз.
  1. Semaphore - ограничивает количество потоков, которые могут получить доступ к ресурсу:
python
from threading import Semaphore

sem = Semaphore(3)  # максимум 3 потока одновременно

def access_resource():
    with sem:
        # работа с ресурсом
  1. Queue - потокобезопасная очередь для обмена данными между потоками.

Для процессов (multiprocessing) аналогичные примитивы есть в модуле multiprocessing.

Важные нюансы:

  • Блокировки могут привести к дедлокам
  • Чрезмерное использование блокировок снижает производительность
  • Для простых операций можно использовать атомарные операции из модуля threading (например, threading.Event)
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы