2010-11-26 2 views
5

Итак, вот моя проблема: Я код в python, но мне нужно улучшить производительность в некоторой части моего кода, которые слишком медленны. Хорошее (и простое) решение, похоже, использует cython; Я попробовал и получил хорошие результаты. Проблема в том, что я использую оператор assert в моем коде python. Прежде чем использовать cython, я мог бы скомпилировать мой код python с параметром -OO, чтобы я мог доставить версию, не выполняющую никакого теста на утверждение, и все еще должен иметь assert для отладки. Но файлы, которые скомпилированы в cython, по-видимому, всегда выполняют утверждения. Есть ли какие-то опции, которые можно передать компиляции cython для удаления (или не удаления) утверждений?Как удалить утверждение python при компиляции в cython?

+0

dont 'know ... но как насчет простой программы, чтобы прокомментировать все ваши утверждения python в файле, который вы хотите использовать? – Ant 2010-11-26 12:46:04

+0

+1: Я сам нашел эту проблему. Странно, что что-то, предназначенное для быстрого создания вашего кода, не делает простейшей оптимизации всего. – 2010-11-26 13:01:29

ответ

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) будет оптимизирован.

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

  • Нет связанных вопросов^_^