Итак, вот моя проблема: Я код в python, но мне нужно улучшить производительность в некоторой части моего кода, которые слишком медленны. Хорошее (и простое) решение, похоже, использует cython; Я попробовал и получил хорошие результаты. Проблема в том, что я использую оператор assert в моем коде python. Прежде чем использовать cython, я мог бы скомпилировать мой код python с параметром -OO, чтобы я мог доставить версию, не выполняющую никакого теста на утверждение, и все еще должен иметь assert для отладки. Но файлы, которые скомпилированы в cython, по-видимому, всегда выполняют утверждения. Есть ли какие-то опции, которые можно передать компиляции cython для удаления (или не удаления) утверждений?Как удалить утверждение python при компиляции в cython?
5
A
ответ
7
Cython пропускает утверждения, если вы определяете макрос препроцессора C PYREX_WITHOUT_ASSERTIONS
. Поэтому передайте -DPYREX_WITHOUT_ASSERTIONS
компилятору C при компиляции сгенерированного файла C. Как это зависит от вашего процесса сборки.
0
Использование pypreprocessor
Что можно найти на PYPI (Python Package Index) и быть извлечена с помощью пипс.
Вот реализация:
from pypreprocessor import pypreprocessor
pypreprocessor.parse()
#define debug
#ifdef debug
...place assert to be removed here...
#endif
Это по существу работает так же, как стандартный C препроцессором условной компиляции делает.
SideNote: Этот модуль совместим как с python2x, так и с python3k.
Отказ от ответственности: Я являюсь автором pypreprocessor.
Это приведет к тому, что начальная нагрузка займет больше времени из-за добавленной стадии препроцессора, но выходной байт-код (.pyc) будет оптимизирован.
dont 'know ... но как насчет простой программы, чтобы прокомментировать все ваши утверждения python в файле, который вы хотите использовать? – Ant 2010-11-26 12:46:04
+1: Я сам нашел эту проблему. Странно, что что-то, предназначенное для быстрого создания вашего кода, не делает простейшей оптимизации всего. – 2010-11-26 13:01:29