[Python-es] namespaces y variables globales

jordi torrents jtorrents en milnou.net
Jue Nov 4 20:04:30 CET 2010


Hola Ramiro,

2010/11/4 Ramiro:
> El problema que le veo es que queda muy escondida, si es una variable global tendría que quedar bien en claro >eso  por si otra persona, o vos mismo dentro de un tiempo, lee el programa.
>
> Yo lo haría al modo de Alvaro Manrique como te dijo en un mensaje. Y si tendría que usar esa variable en varios >módulos distintos (varios archivos .py), crearía un módulo con todas las variables globales y luego para leerlas o >asignarles valores me referiría a esas variables con su nombre de módulo y todo.

Es verdad que la utilización directa de "globals()" es bastante
críptica pero creo que lo que propones no funcionaría en mi caso. Yo
necessito crear una instáncia de una classe con un valor (número de
cpus a utilizar) que le passo al programa desde la línia de comandos.
Esta instáncia (de la calse Server de parallelpython) debe ser
accesible para bastantes funciones del programa. Cómo tengo que
pasarle ese valor desde la línea de comandos (utilizo optparse) sólo
puedo leer el valor desde la función "main", y si instancio la classe
Server en la función main, ésta se queda en el contexto local de la
función y no es accessible para las otras funciones del programa que
son las que utilizan la paralelización para hacer parte de los
cálculos.

Cabe decir que este "apaño" sólo lo necesito para hacer unos tests de
escalabilidad de los cálculos en el clúster. Una vez hechos los tests,
el programa que ejecuta los cálculos ya no necessitará que le pase via
línea de comandos el número de cpus a utilizar.

Otra opción que se me ocurre para hacer los tests es no pasar el
número de cpus via línea de comandos sinó editar cada vez el script
antes de ejecutarlo y poner a mano el número de cpus en la instancia
Server de parallel python. Pero no me gusta mucho la perspectiva, y la
opción que propone Oswaldo me funciona bien. O sea que haré los tests
así y pondré un comentario bien visible en la función main explicando
el uso directo de "globals()".

Gracias i Salut!


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