numpa how code accelerate python performance python-idle

numpa - how to accelerate python code



Python: ¿Por qué es tan lento IDLE? (2)

IDLE es mi editor favorito de Python. Ofrece un shell de Python muy agradable e intuitivo que es extremadamente útil para la prueba y depuración de unidades, y un depurador limpio.

Sin embargo, el código ejecutado bajo IDLE es increíblemente lento. Por locamente me refiero a 3 órdenes de magnitud lenta:

golpetazo

time echo "for i in range(10000): print ''x''," | python

Toma 0.052s,

OCIOSO

import datetime start=datetime.datetime.now() for i in range(10000): print ''x'', end=datetime.datetime.now() print end-start

Toma:

>>> 0:01:44.853951

Que es aproximadamente 2,000 veces más lento.

¿Alguna idea, o ideas de cómo mejorar esto? Supongo que tiene algo que ver con el depurador en segundo plano, pero no estoy muy seguro.

Adán


El problema es la salida de texto no el depurador.

Lo probé en mi sistema Q6600 (3GHz overclocked) y mis números son aún peores. Pero es fácil ver que disminuyen a medida que se agrega más texto de salida.

Traté de ejecutarlo con

1000 iteraciones => 7,8 seg 2000 iteraciones => 28,5 seg 3000 iteraciones => 70 seg

Hice algunas cosas de TK de bajo nivel en el pasado y sé que el widget TkText mantiene el texto en una estructura BTree. Agregar texto a un carácter una vez es una de las peores formas de hacerlo, pero parece ser lo que está haciendo IDLE. La forma normal es capturar más datos y agregar una porción más grande de texto.

Sorprendentemente si escribes imprime ''x / n'' la salida es mucho más rápida. 3000 iteraciones en 7 segundos y tus 10000 en 19 seg.

Entonces, el problema es definitivamente al agregar caracteres individuales a las líneas existentes. El programador IDLE no sabía cómo funciona TkText.

Por lo tanto, el consejo es agregar más líneas nuevas en su texto o generar fragmentos más grandes y no solo un único carácter ''x''.


El problema está en el widget de texto Tkinter, y su gestión ineficiente de líneas muy largas, y usted crea uno. Notará que, mientras que cualquier parte de una línea muy larga es visible, todo desplazamiento es extremadamente lento.