[Python-es] namespaces y variables globales

jordi torrents jtorrents en milnou.net
Lun Nov 8 12:59:13 CET 2010


Hola Chema,

2010/11/7 Chema Cortes <pych3m4 en gmail.com>:
> Pienso que no tienes nada de qué disculparte. Este código es muy
> bueno, vengas de la disciplina que vengas.

La verdad es que gran parte del código que he pegado pertenece a un
ejemplo de uso de parallel python [1] escrito por Vitalii Vanovschi,
que es su desarrollador principal. Todos los ejemplos son muy útiles y
me han ayudado mucho a reescribir los análisis que tenia implementados
sequencialmente en paralelo. Parallelpython es una biblioteca
fantástica; muy potente i fácil de utilizar si tienes que aplicar la
misma función, o conjunto de funciones, para un conjunto de inputs
ligeramente diferentes.

> Una cosa que puedes mejorar es en el uso de "generadores" en lugar de
> comprensión de listas, apropiados sobre todo en cálculos repetitivos.
>
> jobs= ( (input, job_server.submit(sum_primes,(input,),(isprime,), ("math",)))
>            for input in inputs )
> for input, job in jobs:
>   print "Sum of primes below", input, "is", job()
>
> De este modo sólo existirá un job_server, el que se ejecuta, en contra
> de como lo tenías donde estaban todos los job_servers previamente
> creados como elementos de una lista. Al usar un generador, los
> job_server se crean (y se destruyen) a medida que se van ejecutando.

He hecho algunas pruebas cambiando las compresiones de listas por
generadores en mis análisis y los resultados son muy buenos, el
consumo de memoria ha bajado sustancialmente. Hay que decir que en mis
análisis tengo que crear generadores o listas con 128 instancias de
job_server como las del ejemplo, supongo que por eso la disminución de
consumo de memoria es tant aparente.

Muchas gracias por la sugerencia, conocía los generadores pero hasta
ahora los había utilizado poco.

Salut!

[1] http://www.parallelpython.com/content/view/17/31/#SUM_PRIMES


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