2015-12-29 1 views
1

Я увижу улучшение скорости, если я скомпилирую мои файлы python на cython? Или мне нужно переписать мой код на cython, чтобы увидеть улучшение?Собирает ли файлы python на cython ускорение программы?

Я делаю это как показано ниже.

python convert_to_cython.py build_ext --inplace 
+2

Чтобы получить лучшее улучшение с помощью 'cython', вам необходимо прочитать документы' cython'. Был задан ряд вопросов и ответов о получении ожидаемых улучшений с помощью cython. Изучите их. – hpaulj

+0

Кроме того, я не понимаю, что должен делать ваш пример. Что такое 'convert_to_cython.py'? Похоже, вы путаете файл ['setup.py' для расширения distutils] (http://docs.cython.org/src/userguide/source_files_and_compilation.html) для вашего реального исходного кода Python. –

ответ

-2

Хотя этот вопрос достаточно широк, но в общих чертах ДА. Это ускорит ваш код и где-то в порядке 100.

Для справки, Cython документы говорит, я цитирую

Однако для повышения производительности критического кода, часто бывает полезно добавить статические тип декларации, так как они позволяют Cython выйти из динамической природы кода Python и создавать простой и быстрый код C - иногда быстрее на порядки

Основная причина, почему языки, как C/C++ быстрее, так это то, что они создают машинный язык ассемблера для настройки всей оптимизации, зависящей от оборудования. Это достигается с помощью компиляторов в основном потому, что некоторые вещи, как

  1. статически типизированных переменной
  2. петля разворачивая
  3. прогнозирования отделения

и т.д ..

Теперь Одна из важной особенностью статично типизированная переменная широко используется Cython. Поскольку переменные python являются безликими и переменными C нет, Cython может предоставить пользователям гибкость, чтобы статически фиксировать тип своих переменных.

В Cython doc website они показали, как просто указывая тип фактически произведенного 35% более высокая производительность.

ПримечаниеОднако мое последнее слово в том, что вы быть осторожным при преобразовании кода Python в Cython, потому что вы можете использовать некоторые рамки/API в вашем проекте, которые не имеют поддержки Cython. Когда-нибудь, даже если вы преобразуете свой код в Cython, это почти ничего не меняет. Так что все зависит от вашего кода.

Следовательно, сначала убедитесь в полной переносимости кода Python в Cython, а также проверьте, что это абсолютно необходимо.

Редактировать 1 Еще одна вещь заключается в том, что преобразование кода в Cython делает его менее читаемым, поэтому, пожалуйста, помните об этом.

Опять Цитируя Cython Docs

Следует, однако, отметить, что заявления типа могут сделать исходный код более многословным и, следовательно, менее читаемым.В связи с этим обескуражен использовать их без уважительной причины, например, когда тесты доказывают, что они действительно делают код значительно быстрее в исполнении критической секции

Edit 2 Отвечая на вопрос Или мне нужно переписать мой код в цитоне, чтобы увидеть улучшение?

No потому что компилятор Cython делает все это для вас.

Компилятор Cython преобразует его в код C, который делает эквивалентные вызовы API Python/C.

Поскольку Cython может принимать практически любой действительный исходный файл python, одна из самых сложных задач при запуске - это просто выяснить, как скомпилировать расширение.

Для получения дополнительной информации посетите this

+1

Первая цитата противоречит вашему ответу. –

+1

@ IgnacioVazquez-Abrams В первой цитате сказано, что статически упоминая тип, он создает более быстрый исполняемый файл, и я упомянул то же самое в своем ответе. Итак, как я противоречу? –

+2

«Или мне нужно переписать мой код на цитоне, чтобы увидеть улучшение?» Добавление статических объявлений переписывает часть его. –

3

Как он стоит, этот вопрос является слишком широким, потому что ответ во многом зависит от того, что ваш код Python выглядит. Не видя этого или, по крайней мере, не имея представления о том, что он делает, невозможно дать вам прямой ответ.

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

Ваш первый шаг должен всегда состоять в профиле вашего кода (например, с использованием отличного line_profiler). Как только вы определили, где узкие места, вы можете подумать о том, как ускорить их, возможно, переписав их в Cython. Это почти наверняка будет пустой тратой времени для вас, чтобы перейти и переписать весь существующий код Python в Cython.

Смежные вопросы