<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mundo Geek &#187; psyco</title>
	<atom:link href="http://mundogeek.net/etiqueta/psyco/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Python más rápido con Psyco</title>
		<link>http://mundogeek.net/archivos/2008/11/26/python-mas-rapido-con-psyco/</link>
		<comments>http://mundogeek.net/archivos/2008/11/26/python-mas-rapido-con-psyco/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 14:02:47 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[modulos]]></category>
		<category><![CDATA[psyco]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rendimiento]]></category>
		<category><![CDATA[velocidad]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=2111</guid>
		<description><![CDATA[Psyco es un módulo que nos permite mejorar enormemente la velocidad de nuestras aplicaciones Python a cambio de un ligero incremento en el tiempo de inicialización. Esto se logra compilando parte del código de la aplicación en tiempo de ejecución (compilador JIT o Just In Time). Basta con añadir un par de líneas al comienzo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://psyco.sourceforge.net/">Psyco</a> es un módulo que nos permite mejorar enormemente la velocidad de nuestras aplicaciones Python a cambio de un ligero incremento en el tiempo de inicialización. Esto se logra compilando parte del código de la aplicación en tiempo de ejecución (compilador JIT o Just In Time).</p>
<p>Basta con añadir un par de líneas al comienzo de nuestro script para que Psyco compile tanto código como sea posible.<br />
<span id="more-2111"></span></p>
<pre name="code" class="python">import psyco
psyco.full()</pre>
<p>Para aplicaciones complejas el uso de la función <code>full</code> puede no ser lo más adecuado, puesto que se necesitaría una gran cantidad de tiempo y memoria para compilar todo el código. En estos casos puede ser de mayor utilidad la función <code>psyco.profile()</code> con la que Psyco realizará un pequeño estudio del código y comprobará qué funciones merece la pena compilar.</p>
<pre name="code" class="python">import psyco
psyco.profile()</pre>
<p>También puede ser de utilidad llamar primero a la función <code>psyco.log()</code> para Psyco cree un archivo en el que registrar el tiempo y la memoria utilizados para ejecutar el programa, así como cualquier problema con los que se pueda haber encontrado.</p>
<pre name="code" class="python">import psyco
psyco.log()
psyco.profile()</pre>
<p>También podemos indicar de forma explicita la función, método o clase que queramos compilar usando la función <code>bind</code></p>
<pre name="code" class="python">import psyco
psyco.bind(mi_funcion)</pre>
<p>Como ejemplo de lo que es capaz de hacer Psyco veamos cuánto tardaríamos en ordenar una lista de 1 millón de elementos utilizando el algoritmo quick sort con y sin Psyco.</p>
<pre name="code" class="python">import random
import psyco
import time

def quick_sort(lista):
    if not lista:
        return []
    else:
        pivote = lista[0]
        menor = quick_sort([x for x in lista[1:] if x < pivote])
        mayor = quick_sort([x for x in lista[1:] if x >= pivote])
        return menor + [pivote] + mayor

lista = range(1, 1000000)
random.shuffle(lista)

inicio = time.time()
quick_sort(lista)
fin = time.time()

print "Sin Psyco", fin - inicio

psyco.full()

inicio = time.time()
quick_sort(lista)
fin = time.time()

print "Con Psyco", fin - inicio</pre>
<p>En mi caso el resultado es el siguiente:</p>
<p class="code">$ python ej-psyco.py<br />
Sin Psyco 9.95299983025<br />
Con Psyco 5.45300006866</p>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushPython.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh//flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/11/26/python-mas-rapido-con-psyco/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

