[pyar] Duda, procesos e instancias

nachopro tranceway en gmail.com
Lun Nov 14 12:33:30 ART 2011


Hola, soy fanático de multiprocessing... no users trheads :P

En realidad es más trabajo y más puntos de fallas (o no) pero podés
usar sockets entre procesos para intercambiar información, aunque no
sé bien qué necesitás hacer: querés hacer lo del loguear o era un
ejemplo para simplificar la consulta?

2011/11/14 Martin Cerdeira <martincerdeira en gmail.com>:
> 2011/11/13 Roberto Alsina <ralsina en netmanagers.com.ar>
>>
>> On 11/13/2011 10:59 PM, Martin Cerdeira wrote:
>>>
>>> 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??
>>
>> Estás un poco confundido, pero creo que sé porqué :-)
>>
>> Lo estás pasando de un proceso a otro. Una instancia es un cacho de
>> memoria. ¿Cómo va a ser la misma, si los procesos no comparten memoria?
>>
>> Si esto fueran threads, podría ser la misma instancia. Si no me falla la
>> memoria, lo que hace Queue es hacer un pickle del objeto, y 'despicklearlo'
>> en el otro proceso.
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
> Ah, ah, ah! Estaba meando completamente fuera del tarro!! jajajaja, claro!
> Al tener procesos distintos, no puedo compartir la instancia! Voy a probar
> con threads, gracias!
>
> Saludos
> -------------------------------------
> Martín Cerdeira - Software Developer
> [web] http://www.codmacs.blogspot.com/
> ()  ascii ribbon campaign
> /\  www.asciiribbon.org
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



-- 
ignacio benedetti a.k.a. nachopro
mailto:tranceway en gmail.com
http://blog.nachopro.com.ar/



More information about the pyar mailing list