2010-11-26 12 views
5

es así, aquí es mi problema: Código I en pitón, pero necesito mejorar el rendimiento en alguna parte de mi código que son demasiado lentos. Una buena (y fácil) solución parece ser el uso de cython; Lo intenté y obtuve buenos resultados. El problema es que uso declaración de afirmación en mi código de python. Antes de utilizar Cython, podría compilar mi código Python con la opción -OO, de modo que pueda ofrecer una versión no ejecutar ninguna prueba de la afirmación, y aún así tener la aserción de depuración. Pero los archivos que se compilan en cython parecen ejecutar siempre los asertos. ¿Hay algunas opciones que se pueden pasar a la compilación de cython para eliminar (o no eliminar) las aserciones?¿Cómo eliminar la aserción de python al compilar en cython?

+0

'No sé ... pero ¿qué pasa con hacer una sencilla Programm para comentar toda su afirmación de pitón en el archivo que desea utilizar? – Ant

+0

+1: He encontrado este problema yo mismo. Es extraño que algo diseñado para hacer que tu código sea rápido no hace la optimización más simple de todas. –

Respuesta

7

Cython se salta las afirmaciones si se define el preprocesador C macro PYREX_WITHOUT_ASSERTIONS. Pase -DPYREX_WITHOUT_ASSERTIONS al compilador C al compilar el archivo C generado. Cómo a esto depende de tu proceso de construcción.

+0

Gracias por esta respuesta rápida. Estoy usando el método Distutils, así que tendré que comprobar cómo pasar la macro al compilador. – user521353

+1

CYTHON_WITHOUT_ASSERTIONS funciona igual de bien, aunque nosotros apoyamos PYREX_WITHOUT_ASSERTIONS para la compatibilidad hacia atrás. – robertwb

0

Uso pypreprocessor

que también se pueden encontrar en PYPI (Python Package Index) y se encontraron usando PIP.

Aquí está la aplicación:

from pypreprocessor import pypreprocessor 

pypreprocessor.parse() 

#define debug 

#ifdef debug 
...place assert to be removed here... 
#endif 

Esto funciona esencialmente el mismo que el preprocesador de C estándar compilación condicional hace.

Nota al margen: Este módulo es compatible tanto con python2x y python3k.

Descargo de responsabilidad: soy el autor de pypreprocessor.

Esto hará que la carga inicial tarde más debido a la etapa de preprocesador agregada, pero se optimizará el byte de código (.pyc).

Cuestiones relacionadas