example python c cython

python - example - Tutoriales de Cython Noob-Ready



cython pypi (7)

Conozco un montón de lenguajes de script (python, ruby, lua, php) pero no conozco ningún lenguaje compilado como C / C ++. Quería intentar acelerar un código python usando cython, que es esencialmente un python. > Compilador de C, destinado a crear extensiones de C para python. Básicamente, usted codifica una versión más estricta de python que se compila en C -> código nativo.

Aquí está el problema, no sé C, pero la documentación de cython está dirigida a personas que obviamente ya conocen C (no se explica nada, solo se presenta), y no me sirve de nada. Necesito saber si hay alguna buena. tutoriales de cython dirigidos a programadores de python, o si voy a tener que aprender C antes de aprender Cython.

Ten en cuenta que soy un programador de Python competente, preferiría aprender cython desde la perspectiva del lenguaje en el que ya soy bueno, en lugar de aprender un lenguaje completamente nuevo para aprender a usar cython.

1) POR FAVOR, no recomiendo psyco

edición: CUALQUIER información que ayude a entender la documentación oficial de cython es información útil


¡Aprende C! (Lo siento - irresistible.)

En serio, sin embargo, parece que en su mayoría necesita conocer los tipos de variables C (tipos C, si lo desea) para usar cdef efectiva.

Más adelante, si decides morder la bala y aprender C correctamente, consiéntete con una copia de Kernighan y Ritchie , o K & R, disponible en Amazon .


¿Has visto esto: http://www.perrygeo.net/wordpress/?p=116 parece una buena visión general? También puede echar un vistazo a la fuente en pyzmq y gevent: usan Cython para su código principal.

Ben


Cython es compatible con la concurrencia (puede usar subprocesos POSIX nativos con c, que pueden compilarse en un módulo de extensión), solo debe tener cuidado de no modificar ningún objeto de python cuando se libera GIL y tener en cuenta que el intérprete sí. no hilo seguro. También puede usar el multiprocesamiento con python para usar más núcleos para el paralelismo, que a su vez puede usar sus extensiones compiladas de cython para acelerar aún más. Pero en definitiva, definitivamente hay que saber el modelo de programación c, los tipos estáticos, etc.


Cython no soporta los hilos bien. ¡Mantiene el GIL (Global Intrepreter Lock) todo el tiempo! Esto hace que su código sea seguro al deshabilitar (virtualmente) la ejecución concurrente. Así que no lo usaría para el desarrollo de propósitos generales.


Puede hacer muchas cosas muy útiles con Cython si puede responder la siguiente prueba de C ...

(1) ¿Qué es un doble? ¿Qué es un int?

(2) ¿Qué significa la palabra "compilar"?

(3) ¿Qué es un archivo de encabezado (.h)?

¡Para responder a estas preguntas no es necesario leer un libro completo! ... tal vez el capítulo 1.

Una vez que pueda pasar la prueba, intente nuevamente con el tutorial.

Lo que normalmente hago es comenzar con el código puro de Python y agregar elementos de Cython poco a poco. En esa situación, puedes aprender las características de Cython poco a poco. Por ejemplo, no comprendo las cadenas en C, porque hasta ahora no he tratado de citonizar el código que involucra cadenas. Cuando lo haga, primero buscaré cómo funcionan las cadenas en C, y luego buscaré cómo funcionan las cadenas en Cython.

Nuevamente, una vez que hayas empezado con Cython, de vez en cuando te encontrarás con alguna complicación que requiere aprender un poco más de C. Y, por supuesto, cuanto más C sabes, más despiadado estarás al aprovechar Cython al máximo, no mencionar la solución de problemas si algo sale mal. ¡Pero eso no debería hacerte renuente a comenzar!


Sobre toda la C que realmente necesitas saber es:

  1. Los tipos C son mucho más rápidos que los tipos Python (la adición a C ots se puede hacer en un solo ciclo de reloj) pero es menos segura (no tienen un tamaño arbitrario y puede desbordarse en silencio).
  2. cdef llamadas a la función C ( cdef ) son mucho más rápidas que las llamadas a la función Python ( def ) (pero son menos flexibles).

Esto te llevará la mayor parte del camino allí. Si desea alcanzar ese último 10-20% de aceleración para la mayoría de las aplicaciones, no hay forma de saber C, y cómo funcionan los procesos modernos (punteros, caché, ...).


cython es bueno en dos cosas diferentes

  1. Interfaz con bibliotecas de lenguaje C
  2. Acelerar el código de Python

Probablemente se expone más a partir de 1. por lo tanto, se enfatiza en los materiales de tutoría que has encontrado para las cosas de C. Parece que quieres usarlo como 2. aunque.

Desde mi experiencia con cython , puedes intentar compilar tus programas de python y ver si funcionan. Se pondrá un poco más rápido (tal vez). Para ser mucho más rápido, debes convertir selectivamente los tipos de python en tipos C. Esto comienza a sacar a relucir el poder del cython.

Si observa el tutorial oficial , debe estudiar dónde han utilizado la palabra clave cdef .

Así que para recapitular

  1. Haga que su programa Python existente se compile con cython con la menor cantidad de cambios posible
  2. cdef algunas variables como cdef y haz que funcione de nuevo.
  3. Si no es lo suficientemente rápido, vaya al paso 2.

Lamento que no sea un indicador de un tutorial, ¡pero debería darle una dirección para entrar!