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

Какие знаешь примитивы синхронизации в asyncio

В asyncio есть несколько примитивов синхронизации, аналогичных threading, но работающих с корутинами:

  1. Lock - базовый мьютекс:
python
lock = asyncio.Lock()
async with lock:
    # критическая секция
  1. Event - уведомление между задачами:
python
event = asyncio.Event()
await event.wait()  # блокировка
event.set()  # разблокировка всех ожидающих
  1. Semaphore - ограничение параллелизма:
python
sem = asyncio.Semaphore(5)
async with sem:
    # не более 5 одновременных выполнений
  1. Condition - сложные условия ожидания:
python
cond = asyncio.Condition()
async with cond:
    await cond.wait_for(predicate)
  1. Barrier - синхронизация группы задач:
python
barrier = asyncio.Barrier(3)
await barrier.wait()  # ждет 3 вызова

Все примитивы являются awaitable и работают в рамках одного event loop. Важно избегать deadlock'ов, так как asyncio однопоточный.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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