Сижу иногда над кодом и думаю, как бы его подзадвинуть, чтобы шёл быстрее. Вот что за годы накопал и проверял сам или видел у других:
1. Профилирование — чтобы понять, где именно тормозит. Кто-то юзает cProfile, кто-то py-spy, помогает не гадать.
2. Cython — если надо прижать тяжёлые циклы и вычисления, часто реально ускоряет, превращая Python в C-модуль.
3. Мультипроцессинг и асинхронность — для задач, где можно параллелить, особенно I/O-bound.
4. Использование сторонних библиотек, типа NumPy, Pandas — они сделаны на C, в разы быстрее, чем чистый питон для чисел и массивов.
5. JIT-компиляция через PyPy — может быть полезна, но не во всех случаях, да и со сторонними пакетами иногда не очень дружит.
6. Оптимизация алгоритмов и структур данных — старый-добрый метод, иногда код просто ужать и реструктурировать поможет сильнее, чем трюки с компиляцией.
7. Легковесные инструменты кеширования — если работает с одними и теми же данными, помогает не считать повторно.
Стоит ли вообще дергаться? Зависит от проекта и железа. Иногда проще переписать кривой участок или нацепить нормальный кеш, чем танцы с Cython и прочим.
Кто как обычно ускоряет? Делитесь приемами, что реально работает у вас.
Круто, что затронул кеширование, оно реально часто игнорируется, а даёт серьёзный прирост. Ещё заметил, что иногда помогает просто уменьшить количество вызовов функций внутри циклов — мелочь, а прирост есть. И да, профилирование без этого смысла почти нет, потому что гадаешь в пустоту.