Acelerar código en Python

Hola a tod@s, como todos sabréis Python es un lenguaje interpretado y no compilado, ¿Qué quiere decir eso?, pues que el código fuente no se traduce directamente a código máquina, si no que un intérprete hace de intermediario entre el lenguaje máquina y el código fuente, esto tiene muchas ventajas sobre todo a la hora de programar, ya que no tenemos que estar compilando código por cada modificación que hacemos en nuestro software, pero carga con el inconveniente de que, por muy rápido que sea Python, nunca será igual que lenguajes compilados como pueden ser C o C++, al menos para cosas grandes.

Pero, como ya sabéis, a parte de escribir código, también me gusta mucho curiosear por Internet, en busca de trucos, módulos y utilidades nuevas que me puedan servir de utilidad, y la última con la que me he tropezado ha sido con Psyco.

Psyco es un módulo para Python que compila parte de nuestro código antes de ejecutarse, de esa forma el código corre mucho mas rápido y mas eficiente, eso si, sacrificando un poco de tiempo al inicializar, ya que, cuando se inicia, compila parte del código, aquí podemos ver una gráfica donde se observa la diferencia de rendimiento utilizando Psyco.


El uso es mas que sencillo, solo hay que escribir al principio de nuestro programa lo siguiente:

import psyco  
psyco.full()

De esta forma, Psyco compilará todo el código que pueda y después ejecutará el programa, pero, en proyectos muy grandes, donde existe mucho código, seguramente no compensa compilarlo todo, ya que tardaría demasiado en inicializar y no merecería la pena, pues para eso también existe otro método:

import psyco  
psyco.profile()

En este caso, Psyco analizará el código y solo compilará aquello que merece la pena compilar, evidentemente, esta decisión al tomarla una máquina no funcionará bien en el 100% de los casos, pero aún así funcionará mejor para grandes proyectos que el método "full".

Si lo que queremos es que, a parte de compilar nuestro código y ejecutarlo, queremos que nos devuelva un log indicando errores, memoria utilizada, tiempos...

import psyco  
psyco.log()  
psyco.profile()  

Y ya por último, si no queremos que compile todo nuestro código, si no tan sólo una función en especial, se solucionaría de la siguiente forma:

import psyco  
psyco.bind(mi_funcion)

Sinceramente este módulo me ha servido de muchísima utilidad, a mi me a proporcionado entre un 40 % y un 50 % más de rendimiento simplemente con el método "full", un abrazo a tod@s y hasta el siguiente Post.

Fuente | Psyco

PD: Desgraciadamente, Psyco ha dejado de estar mantenido desde hace mas o menos un año, aún así, funciona perfectamente y es extremadamente útil, si queréis una alternativa que aún sigue activa, también existe PyPy, la cual la podéis encontrar en el mismo sitio web que Psyco.

3 comentarios:

Dan dijo...

Francisco soy daniel , siento no haber leido todos tus post , pero es que yo entraba en seminariopython
porque dijiste que te mudabas alli.
Este tiempo me estancado en python y especialmente en Tkinter pero he aprendido sh , en linux.
Un Saludo.
Dan

zetaka01 dijo...

Hola Francisco, psyco no funciona desde python 2.6. Ahora el sustituto es PYPY, una variante de cpython compatible con la versión 2.7. Trae un compilador JIT incorporado, lo malo es que no soporta módulos como TkInter.
Un saludo.

Dan dijo...

Francisco como se puede coger la informacion de una variable de tkinter
es decir un cuadro de texto que escribas algo y se guarde en un archivo al pulsar un boton