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

Есть ли Race condition в асинхронности

Да, race condition возможен и в асинхронном коде, несмотря на отсутствие параллельного выполнения. Это происходит из-за чередования корутин и неатомарных операций.

Пример:

python
import asyncio

counter = 0

async def increment():
    global counter
    temp = counter
    await asyncio.sleep(0)  # точка переключения контекста
    counter = temp + 1

async def main():
global counter
tasks = [increment() for _ in range(1000)]
await asyncio.gather(*tasks)
print(counter) # может быть меньше 1000

asyncio.run(main())

text

Для защиты используйте:
1. `asyncio.Lock()`
2. Атомарные операции (если возможно)
3. Ограничение доступа к общим ресурсам

Асинхронный race condition сложнее обнаружить, так как он зависит от порядка выполнения корутин, который может меняться между запусками.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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