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

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы