Python задачи и вопросы
1.25K subscribers
419 photos
1 video
1 file
155 links
Задачи и вопросы с собеседований по python разного уровня сложности

По рекламе: @cyberJohnny
Download Telegram
Uvicorn/FastAPI-сервис использует asyncio и сторонние библиотеки, под капотом создающие потоки. Для CPU-bound задач вы подключили multiprocessing, но периодически ловите подвисания/краши при старте воркеров. Какой способ старта процессов корректнее выбрать?

👾 — fork — самый быстрый, поэтому всегда лучший выбор на Linux
👍 — spawn — запуск чистого интерпретатора, безопасен при наличии потоков/мьютексов у родителя
🥰 — forkserver — ничего не меняет относительно потоков, просто сложнее
⚡️ — Любой — способы эквивалентны на Linux

Библиотека задач по Python
В FastAPI вы кладёте correlation-id в contextvars.ContextVar в middleware. В логах он есть в хэндлерах, но иногда пропадает в коде, который выполняется через run_in_executor и в фоновых задачах asyncio.create_task(...). Что делать правильно?

👾 — Заменить ContextVar на глобальную переменную с мьютексом
👍 — Создавать фоновые задачи после установки ContextVar, а для run_in_executor запускать функцию через contextvars.copy_context().run(func, *args) для переноса контекста
🥰 — Перейти на threading.local(), он автоматически работает и в потоках, и в тасках
⚡️ — Включить uvloop — он сам перенесёт контекст в фоновые задачи и executor

Библиотека задач по Python
Что выведет код?

👾 — [1, 1, 1, 1]
👍 — [0, 1, 1, 0]
🥰 — [1. 1. 1. 0]
⚡️ — Error

Библиотека задач по Python
Сервис создаёт миллионы однотипных небольших объектов (несколько фиксированных полей). Память растёт, GC давит. Что изменить в моделях, чтобы существенно снизить footprint и ускорить доступ к атрибутам?

👾 — Отключить GC через gc.disable()
👍 — Хранить данные в dict вместо объектов
🥰 — Использовать slots или @dataclass(slots=True) для моделей
⚡️ — Увеличить sys.setrecursionlimit()

Библиотека задач по Python
Что выведет код сверху?

👾 — 9
👍 — 6
🥰 — 4
🤔 — Error

Библиотека задач по Python
Что выведет код?

👾 — 100 200 10 200
👍 — 10 200 10 200
🥰 — 100 100 10 20
⚡️ — 100 200 100 200

Библиотека задач по Python
В асинхронном сервисе (Python ≥ 3.11) нужно запустить группу независимых корутин и при первой ошибке гарантированно отменить остальные с корректной агрегацией исключений. Что выбрать?

👾 — asyncio.gather(*cors, return_exceptions=True)
👍 — asyncio.TaskGroup()
🥰 — loop.run_until_complete() по одной корутине в цикле
⚡️ — создать asyncio.create_task на каждую и игнорировать исключения в фоне

Библиотека задач по Python
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге (https://clc.to/webinarAI)
Что выведет код?

👾 — {1}
👍 — {9}
🥰 — {KeyError}
👏 — {1} или {9}

Библиотека задач по Python
Нужно запустить долгую корутину и дать вызывающему коду таймаут, но при истечении времени задача не должна отменяться, а продолжить выполняться в фоне. Что выбрать?

👾 — await asyncio.wait_for(op(), timeout=5)
👍 — t = asyncio.create_task(op()); await asyncio.wait_for(asyncio.shield(t), timeout=5)
🥰 — Запуск через ThreadPoolExecutor
— await asyncio.gather(op(), return_exceptions=True) с таймаутом

Библиотека задач по Python
Нужно вызвать блокирующую функцию (нет async-аналога) из обработчика на asyncio, не блокируя event loop. Что выбрать?

👾 — Просто вызвать функцию напрямую в корутине
👍 — await asyncio.to_thread(func, *args, **kwargs)
🥰 — Обернуть функцию в async def и вызвать await func()
— Запустить функцию через time.sleep для «уступки» циклу

Библиотека задач по Python