Asyncio python

Вопросы:

1. Что такое asyncio и какие задачи оно решает в Python?

2. Чем асинхронность отличается от параллелизма и многопоточности в контексте Python?

3. Какие типы задач лучше всего подходят для asyncio, а какие нет, и почему?

4. Что такое event loop и какую роль он играет в работе asyncio?

5. Как конкретно работает event loop asyncio?

6. Как получить и запустить event loop в современном Python (3.10+), и почему часто рекомендуют asyncio.run?

7. Что такое coroutine (короутина) и чем она отличается от обычной функции?

8. Что делает ключевое слово await и где его можно использовать?

9. Что такое awaitable-объекты и какие виды awaitable есть в Python?

10. Как создать и выполнить простую короутину, и что произойдет, если ее не await-ить?

11. Что такое Task в asyncio и чем она отличается от coroutine object?

12. Как создать Task и зачем это делать в реальном коде?

13. В чем разница между последовательным await нескольких корутин и конкурентным запуском через create_task?

14. Как правильно дождаться завершения нескольких задач: asyncio.gather и asyncio.wait, в чем различия и когда что использовать?

15. Как обрабатывать исключения при использовании asyncio.gather, включая режим return_exceptions?

16. Как устроена отмена задач: asyncio.CancelledError, когда он возникает и как корректно отменять задачи?

17. Как обеспечить корректное завершение приложения: graceful shutdown для нескольких задач и закрытие ресурсов?

18. Что такое таймауты в asyncio и как использовать asyncio.wait_for в прикладных сценариях?

19. Как ограничить конкурентность запросов или задач (например, 1000 URL, но не более 50 одновременно) с помощью asyncio.Semaphore?

20. Для чего нужны asyncio.Lock и asyncio.Event и как они применяются на практике?

21. В чем разница между asyncio.Queue и queue.Queue и как использовать asyncio.Queue в producer-consumer архитектуре?

22. Как реализовать pipeline обработки данных (скачивание, парсинг, запись) на asyncio с очередями и несколькими воркерами?

23. Как работать с асинхронными контекстными менеджерами: async with и зачем он нужен (например, для соединений)?

24. Как работают асинхронные итераторы: async for, и где они встречаются в реальных библиотеках?

25. Что такое async генераторы и когда они удобнее, чем возврат списка целиком?

26. Как интегрировать блокирующий код в asyncio-приложение: asyncio.to_thread и run_in_executor, когда выбирать какой вариант?

27. Почему блокирующие вызовы (time.sleep, requests, тяжелые вычисления) вредят event loop, и как это диагностировать?

28. Как организовать периодические задачи (cron-like) внутри asyncio-приложения без внешнего планировщика?

29. Как реализовать retry с экспоненциальной задержкой для сетевых операций в asyncio и где ставить таймауты?

30. Как применять asyncio в сетевом I/O на практике: пример типового стека с aiohttp или httpx, и какие ошибки там частые?

31. Как устроен connection pooling в асинхронных HTTP клиентах и как правильно переиспользовать сессии?

32. Как ограничивать скорость запросов (rate limiting) в asyncio приложении и чем это отличается от ограничения конкурентности?

33. Как организовать обработку сигналов ОС (SIGINT/SIGTERM) в asyncio приложении и корректно завершать задачи?

34. Как устроен asyncio streams API (start_server, open_connection) и когда его выбирают вместо высокоуровневых библиотек?

35. Как безопасно работать с общим состоянием в asyncio, если задача может быть прервана отменой в любой точке await?

36. Как выстроить архитектуру сервиса на asyncio: разделение на слои, управление жизненным циклом, фоновые задачи?

37. Какие паттерны структурированной конкурентности доступны в современных версиях Python (TaskGroup), и какие проблемы они решают?

38. Как использовать asyncio.TaskGroup, чем он отличается от gather, и как он ведет себя при исключениях?

39. Какие инструменты наблюдаемости и отладки вы используете для asyncio: логирование, asyncio debug mode, tracemalloc, мониторинг latency event loop?

40. Как измерить и уменьшить задержки event loop (loop lag) в продакшене и какие причины чаще всего их вызывают?

41. Опишите реальный кейс: асинхронный сбор данных из внешних API с лимитами, ретраями, таймаутами, очередью на запись в БД; как бы вы спроектировали и протестировали такое решение?