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

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