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 с лимитами, ретраями, таймаутами, очередью на запись в БД; как бы вы спроектировали и протестировали такое решение?