[pyar] Duda, procesos e instancias
Gerardo Allende
gerardoallende en gmail.com
Dom Nov 13 23:19:22 ART 2011
El día 13 de noviembre de 2011 22:59, Martin Cerdeira
<martincerdeira en gmail.com> escribió:
> Hola lista. Estaba armando un programa que usa multiprocessing y, queriendo
> pasar una instancia de una clase, no logro hacerlo. Probé de 2 formas,
> pasandole el parámetro directamente y utilizando el objeto Queue. La
> instancia es de una clase mía que se llama debugger:
>
> import debugger
> import time
> import multiprocessing
>
> def lolo(q):
> db = q.get()[0]
> print db
> db.debug("uno.py")
>
> def lala():
> db = debugger.Debugger()
> q = multiprocessing.Queue()
> q.put([db])
> hilo = multiprocessing.Process(target=lolo, args=(q,))
> hilo.start()
> print "lanzo"
> while hilo.is_alive():
> print "esperando 5 segundos para mandar comando"
> time.sleep(5)
> print "mando comando s a ", db
> db.comando("s")
> hilo.join(.3)
>
> if __name__ == '__main__':
> lala()
>
>
> Con los print db, veo que la instancia de la clase no es la misma. Yo
> necesito pasarle la instancia, como si fuera por referencia.
> También intenté esto:
>
> import debugger
> import time
> import multiprocessing
>
> def lolo(db):
> print db
> db.debug("uno.py")
>
> def lala():
> db = debugger.Debugger()
> hilo = multiprocessing.Process(target=lolo, args=(db,))
> hilo.start()
> print "lanzo"
> while hilo.is_alive():
> print "esperando 5 segundos para mandar comando"
> time.sleep(5)
> print "mando comando s a ", db
> db.comando("s")
> hilo.join(.3)
>
> if __name__ == '__main__':
> lala()
>
> Un ejemplo de lo que veo por pantalla es:
>
> <debugger.Debugger instance at 0x000000000245E8C8> # Este es el print que
> esta en lolo()
>
> mando comando s a <debugger.Debugger instance at 0x00000000022D2048> # Este
> es el segundo print, en lala(), donde se ve que la instancia es otra.
>
> En qué le estoy errando? Sé que python toma "deciciones" sobre si pasar por
> parámetro o por referencia tomando en cuenta la inmutabilidad de los
> objetos. Imagino que este problema pasa por ahí, hay forma de explicitamente
> decirle que me pase la referencia del objeto??
>
> Gracias!!!
> -------------------------------------
> Martín Cerdeira - Software Developer
> [web] http://www.codmacs.blogspot.com/
> () ascii ribbon campaign
> /\ www.asciiribbon.org
>
Hola, probé esto:
#import debugger
import time
import multiprocessing
def lolo(db):
print db
db.debug("uno.py")
def lala():
db = Debugger()
hilo = multiprocessing.Process(target=lolo, args=(db,))
hilo.start()
print "lanzo"
while hilo.is_alive():
print "esperando 5 segundos para mandar comando"
time.sleep(5)
print "mando comando s a ", db
db.comando("s")
hilo.join(.3)
class Debugger:
"""A simple example class"""
i = 12345
def debug(self,prg):
print 'Debugging:', prg
def comando(self,cmd):
print 'Comando:', cmd
if __name__ == '__main__':
lala()
Pero me devuelve esto:
lanzo
esperando 5 segundos para mandar comando
<__main__.Debugger instance at 0x20b1b48>
Debugging: uno.py
mando comando s a <__main__.Debugger instance at 0x20b1b48>
Comando: s
Veo que las instancias son las mismas, no sé por qué a vos sí te manda
instancias distintas.
Saludos
More information about the pyar
mailing list