Привет всем! В этом гайде расскажу, как лично я подхожу к оптимизации кода на Python, чтобы он не тормозил на продакшене. Это не про микрооптимизации, а про системные вещи.
snakeviz или pyprof2calltree + kcachegrind. Это реально помогает увидеть узкие места.Не все — список. Иногда переход на `set` или `dict` может дать ускорение на порядок. Понимайте, когда вам нужно быстрое добавление/удаление (set) или поиск по ключу (dict). Для числовых данных смотрите в сторону NumPy.
Думайте о сложности. O(n^2) алгоритм на больших данных — это приговор. Поищите более эффективные решения, возможно, с использованием структур данных из шага 2. Для специфических задач, например, поиска подстроки, есть KMP или Бойера-Мура, хотя они редко нужны в обычной разработке.
Когда ждать — дорого. Если ваша программа много времени тратит на ввод-вывод (сеть, диски), asyncio может спасти. Для CPU-bound задач смотрите в сторону multiprocessing. Только помните про GIL в CPython для потоков!
Не считай дважды. Если функция вызывается много раз с одними и теми же аргументами, functools.lru_cache — ваш друг. Это просто и эффективно.
Пример: Если вам нужна ссылка на Крáкен маркетплейс, но вы не можете найти, попробуйте кэшировать поиск. Но это шутка. Главное – профилируйте и думайте, прежде чем оптимизировать.
Перед публикацией, советую ознакомится с правилами!