Python: Как ускорить код (приемы, официальные рекомендации)

Моя программы слишком медленная, как ее ускорить?


Ответы (1 шт):

Автор решения: Dmitry

Ответом является перевод FAQ официальной документации.

Вот несколько принципов, которые помогут достичь приемлимого уровня производительности:

  • Сделайте ваш алгоритм быстрее (или поменяйте на более быстрый), что может дать гораздо большие преимущества, чем пытаться разбрасывать микро-оптимизацию по всему вашему коду
  • Используйте верные структуры данных. Изучите документацию по встроенным типам и модуль collections
  • Когда в стандартной библиотеке представлен примитив, он, скорее всего (хотя это не гарантируется), будет быстрее любой альтернативы, которую вы можете придумать. Это верно вдвойне для примитивов написанных на С, таких как встроенные функции (builtins) и некоторые типы расширений. Например, смело используйте либо встроенный метод list.sort(), либо связанную с ним функцию sorted() для выполнения сортировки.
  • Абстракции, как правило, создают косвенность (так же называемая разыменованием) и заставляют интерпретатор работать больше. Если уровни косвенности перевешивают количество проделанной полезной работы, ваша программа будет работать медленнее. Вам следует избегать чрезмерной абстракции, особенно в виде крошечных функций или методов (которые также часто ухудшают читабельность)

Если вы достигли предела того, что может предоставить чистый Python, то есть инструменты, который позволяют углубиться еще дальше. Например, Cython позволяет скомпилировать слегка измененную версию Python кода в расширение С, что может быть использовано на различных платформах. Cython может использовать преимущества компиляции (и необязательных аннотаций типов), чтобы сделать ваш код значительно быстрее, чем при интерпретации. Если вы уверены в своих навыках программирования на C, вы также можете самостоятельно написать модуль расширения C.

→ Ссылка