В FastAPI сервисе при нагрузке появляются предупреждения Unclosed client session/connector is closed, растёт число открытых файловых дескрипторов. Вы используете aiohttp для внешних HTTP-запросов. Какой подход корректный?
👾 — Создавать aiohttp.ClientSession() на каждый запрос и не закрывать — пусть GC разберётся
👍 — Создать один ClientSession на старте приложения (lifespan), переиспользовать во всех хэндлерах и корректно закрыть на shutdown
🥰 — Заменить на синхронный requests внутри run_in_executor — тогда дескрипторы не утекут
⚡ — Для каждого запроса создавать новый TCPConnector(force_close=True) и сразу закрывать сессию
Библиотека задач по Python
👾 — Создавать aiohttp.ClientSession() на каждый запрос и не закрывать — пусть GC разберётся
👍 — Создать один ClientSession на старте приложения (lifespan), переиспользовать во всех хэндлерах и корректно закрыть на shutdown
🥰 — Заменить на синхронный requests внутри run_in_executor — тогда дескрипторы не утекут
⚡ — Для каждого запроса создавать новый TCPConnector(force_close=True) и сразу закрывать сессию
Библиотека задач по Python
Какое из следующих определений соответствует пакетам (packages) в Python?
Anonymous Poll
14%
Набор основных модулей
57%
Папка с модулями Python
21%
Набор файлов, содержащих определения и операторы Python
7%
Набор программ, использующих модули Python
Что из перечисленного не является ключевым словом в языке Python?
👾 — pass
👍 — eval
🥰 — assert
⚡️ — nonlocal
Библиотека задач по Python
👾 — pass
👍 — eval
🥰 — assert
⚡️ — nonlocal
Библиотека задач по Python
Нужно задать таймаут для блока асинхронных операций так, чтобы по истечении времени корректно произошло отмена вложенных await’ов и наверху ловился TimeoutError без «проглатывания» отмен. Что выбрать?
👾 — await asyncio.wait_for(coro, timeout=5)
👍 — async with asyncio.timeout(5): ...
🥰 — signal.alarm(5) в том же потоке
⚡️ — Оборачивать всё в собственный try/except CancelledError
Библиотека задач по Python
👾 — await asyncio.wait_for(coro, timeout=5)
👍 — async with asyncio.timeout(5): ...
🥰 — signal.alarm(5) в том же потоке
⚡️ — Оборачивать всё в собственный try/except CancelledError
Библиотека задач по Python
Какой будет вывод следующего фрагмента кода?
s = {1, 2, 3, 3, 2, 4, 5, 5}
print(s)
👾 — {1, 2, 3, 3, 2, 4, 5, 5}
👍 — {1, 2, 3, 4, 5}
🥰 — None
⚡️ — {1, 5}
Библиотека задач по Python
s = {1, 2, 3, 3, 2, 4, 5, 5}
print(s)
👾 — {1, 2, 3, 3, 2, 4, 5, 5}
👍 — {1, 2, 3, 4, 5}
🥰 — None
⚡️ — {1, 5}
Библиотека задач по Python
Как работает хэш-таблица?
Хэш-таблица в Python реализована в виде словаря (dict). Вот как это работает:
— Хэширование ключей: Когда вы добавляете пару ключ-значение в словарь, Python сначала вычисляет хэш-код ключа с помощью встроенной функции hash(). Хэш-код — это целое число, представляющее «отпечаток» ключа.
— Разрешение коллизий: Если два разных ключа имеют одинаковый хэш-код (коллизия), Python использует механизм разрешения коллизий для размещения значений в памяти. Одним из наиболее распространенных методов разрешения коллизий является метод цепочек, когда для каждого «ячейки» хэш-таблицы выделен список, в который добавляются все значения с одинаковыми хэш-кодами.
— Поиск значения: При поиске значения по ключу Python сначала вычисляет хэш-код ключа и затем использует его для определения соответствующей «ячейки» в хэш-таблице. Затем происходит поиск значения внутри этой «ячейки» (или цепочки).
Библиотека задач по Python
Хэш-таблица в Python реализована в виде словаря (dict). Вот как это работает:
— Хэширование ключей: Когда вы добавляете пару ключ-значение в словарь, Python сначала вычисляет хэш-код ключа с помощью встроенной функции hash(). Хэш-код — это целое число, представляющее «отпечаток» ключа.
— Разрешение коллизий: Если два разных ключа имеют одинаковый хэш-код (коллизия), Python использует механизм разрешения коллизий для размещения значений в памяти. Одним из наиболее распространенных методов разрешения коллизий является метод цепочек, когда для каждого «ячейки» хэш-таблицы выделен список, в который добавляются все значения с одинаковыми хэш-кодами.
— Поиск значения: При поиске значения по ключу Python сначала вычисляет хэш-код ключа и затем использует его для определения соответствующей «ячейки» в хэш-таблице. Затем происходит поиск значения внутри этой «ячейки» (или цепочки).
Библиотека задач по Python
Как работает select_related в Django ORM?
👾 — Выполняет отдельный запрос для каждой связанной модели
👍 — Делает SQL JOIN и подтягивает связанные объекты сразу
🥰 — Кэширует связанные объекты в памяти на уровне Python
⚡️ — Автоматически превращает ForeignKey в ManyToMany
Библиотека задач по Python
👾 — Выполняет отдельный запрос для каждой связанной модели
👍 — Делает SQL JOIN и подтягивает связанные объекты сразу
🥰 — Кэширует связанные объекты в памяти на уровне Python
⚡️ — Автоматически превращает ForeignKey в ManyToMany
Библиотека задач по Python