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

Приведи пример вызова состояния гонки в asyncio

В asyncio состояние гонки может возникнуть, когда несколько корутин одновременно изменяют общее состояние без должной синхронизации. Пример:

python
import asyncio

shared_counter = 0

async def increment():
    global shared_counter
    temp = shared_counter
    await asyncio.sleep(0.1)  # Имитация IO-операции
    shared_counter = temp + 1

async def main():
tasks = [asyncio.create_task(increment()) for _ in range(100)]
await asyncio.gather(*tasks)
print(f"Final counter value: {shared_counter}") # Вероятно, будет меньше 100

asyncio.run(main())

text

Проблема: между чтением (`temp = shared_counter`) и записью (`shared_counter = temp + 1`) может вклиниться другая корутина. Решение - использовать `asyncio.Lock()`:

```python
lock = asyncio.Lock()

async def safe_increment():
    async with lock:
        global shared_counter
        temp = shared_counter
        await asyncio.sleep(0.1)
        shared_counter = temp + 1

Теперь счетчик будет увеличиваться атомарно.

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

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

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

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