Какие знаешь примитивы синхронизации в 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 однопоточный.