poner script a correr

lasizoillo lasizoillo en gmail.com
Jue Oct 16 18:04:56 CEST 2008


2008/10/16 Marte Fabián Baquerizo Sánchez <martefabian en tredasis.com>:
> Yo siempre he tenido esta duda, espero que alguien pueda orientarme.
>
> Si tengo algo como:
>
> x = 0
> while 1:
>   print x
>   x = x+1
>
> Específicamente con Python:
>
> ¿Qué tanto influyen los siguientes factores en el tiempo que tarda en
> aparecer el resultado en pantalla?
>
> -La prioridad de la ejecución del script

Si este es tu unico proceso, nada. Si hay otros con más prioridad
"dandole candela" al sistema se notará. Dependiendo del planificador
de tareas es posible que tu programa parezca colgado (raro ver
planificadores así).

> -El tipo y velocidad del procesador

En este programa, es posible que se note poco, porque el cuello de
salida esté posiblemente en la I/O del print. Pero si la quitases se
notaría mucho.

> -El sistema operativo
>

Como maneje la I/O puede afectar mucho. El usar un terminal u otro
también te puede afectar en este caso. Es posible que el programa se
bloquee cuando el buffer de salida por pantalla se llene. Un terminal
con grafiquitos, conversión unicode, ... puede afectar en el test
mucho comparado con uno más espartano y rápido.

> La complejidad de la operación influye obviamente, pero ¿de qué formas puedo
> calcular el tiempo que demora el ordenador en calcular una instrucción o qué
> procesos le consumen mas tiempo de CPU a fin de ir optimizando?
>

Python viene con unas herramientas llamadas profilers que sirven para eso. Mira:
http://www.python.org/doc/2.5.2/lib/profile.html

Hay aparte herramientas que se apoyan sobre estos profilers para hacer
que el trabajo de encontrar cuellos de botella en tu código sea más
cómodo:
 * Nose, una libreria para hacer pruebas unitarias, permite integrarse
con un profiler para analizar el tiempo de ejecución de las distintas
partes de tu programa. Esto es cómodo para probar partes
independientes de un programa.
 * repoze.profiler es un midleware WSGI que permite hacer profiling de
paginas web de una forma muy cómoda.
 * http://code.google.com/p/jrfonseca/wiki/Gprof2Dot te permite ver
gráficamente la información proporcionada por el profiler.

Una vez encontrado donde está el problema hay que saber encontrar la
solución. Para eso no conozco recetas mágicas. Solo alguna indicación
que tal vez te sea útil:
 * Antes de recodificar analiza el algoritmo. Es más rápido ordenar
usando quicksort en python que por la burbuca en ensamblador.
 * Comprueba que el problema no esté en funciones que hacen cosas de
I/O. Si es así: usa cachés, revisa ajustes y cables de la red, ...
 * Si no te queda otra, puedes hacerte modulos en C, cython, ... y
usarlos desde python. No hace falta reescribir todo en C porque algo
vaya lento ;-)

Espero que esto te aclare dudas y te permite avanzar descubriendo
problemas de optimización ;-)

Un saludo:

Javi

> Saludos.
>
>
> --------------------------------------------------
> From: "RadicalEd" <willian.radicaled en gmail.com>
> Sent: Thursday, October 16, 2008 10:22 AM
> To: "Lista de discusión sobre python en castellano" <python-es en aditel.org>
> Subject: Re: [Python-es] poner script a correr
>
>> Un bucle infinito podría resultar muy pesado, lo mejor es cada X tiempo.
>>
>> 2008/10/16 <inf200468 en ucf.edu.cu>
>>
>>>
>>>
>>>
>>> vale muchas gracias
>>>
>>>
>>> --------------------------------
>>> Servicio del Grupo de Redes
>>> Universidad de Cienfuegos
>>> Contacto: adminred en ucf.edu.cu
>>>
>>> _______________________________________________
>>> Lista de correo Python-es
>>> http://listas.aditel.org/listinfo/python-es
>>> FAQ: http://listas.aditel.org/faqpyes
>>>
>>
>>
>>
>> --
>> The knowledge is the most dangerous
>> weapon & SoloCodigo is the best programing webforum.
>> http://foros.solocodigo.com
>> _______________________________________________
>> Lista de correo Python-es
>> http://listas.aditel.org/listinfo/python-es
>> FAQ: http://listas.aditel.org/faqpyes
>>
> _______________________________________________
> Lista de correo Python-es http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es