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

По рекламе: @cyberJohnny
Download Telegram
Почему в многопоточном Python-приложении прироста скорости для CPU-bound задач почти не видно?

👾 — Потому что интерпретатор Python не умеет распараллеливать задачи
👍 — Потому что работает Global Interpreter Lock (GIL), который позволяет исполнять байткод только одному потоку
🥰 — Потому что потокам всегда не хватает памяти для стека
⚡️ — Потому что asyncio нужно использовать вместо потоков

Библиотека задач по Python
У вас есть Python-сервис, обрабатывающий большие объёмы данных. При профилировании видно, что программа тратит много времени на создание временных коллекций при работе с map, filter и list comprehensions. Какой подход поможет уменьшить расход памяти и повысить эффективность?

👾 — Переписать код на while-циклы с индексами
👍 — Использовать генераторы и выражения-генераторы вместо создания списков
🥰 —Заменить map и filter на вложенные for-циклы
⚡️ — Принудительно вызывать gc.collect() после каждой итерации
Библиотека задач по Python
У вас есть сервис на Python, который должен параллельно обрабатывать CPU-bound задачи (например, шифрование файлов). Какой из подходов обеспечит реальный прирост производительности?

👾 — Использовать threading.Thread для распараллеливания задач
👍 — Применить asyncio и await для конкурентного выполнения
🥰 — Использовать multiprocessing или ProcessPoolExecutor
⚡️ — Запускать задачи в concurrent.futures.ThreadPoolExecutor
Библиотека задач по Python
В продакшн-сервисе на Python при росте нагрузки CPU-bound задачи (например, обработка изображений) выполняются значительно медленнее, хотя вы используете ThreadPoolExecutor. Почему так происходит и что правильнее сделать?

👾 — В Python потоки работают медленно, лучше перейти на asyncio
👍 — Из-за GIL потоки не дают прироста для CPU-bound задач, лучше использовать ProcessPoolExecutor или multiprocessing
🥰 — Нужно увеличить количество потоков в пуле, чтобы загрузить CPU на 100%
⚡️ — Проблема в сборщике мусора, надо чаще вызывать gc.collect()
Библиотека задач по Python