[pyar] Duda, procesos e instancias

Martin Cerdeira martincerdeira en gmail.com
Lun Nov 14 23:16:36 ART 2011


2011/11/14 Alejandro Santos <listas en alejolp.com>

> 2011/11/14 Alejandro Santos <listas en alejolp.com>:
> >
> > Lo que estás queriendo hacer se puede solucionar usando un Proxy. En
> > la doc del módulo multiprocessing podés ver un par de ejemplo de como
> > usar los managers. [2] [3]
> >
> > [1]
> http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference
> > [2] http://docs.python.org/library/multiprocessing.html#proxy-objects
> > [3]
> http://docs.python.org/library/multiprocessing.html#module-multiprocessing.managers
> >
>
> Un poco mejor explicado: un Proxy te permite ejecutar desde un TPT
> (thread/proceso/tarea/etc.) codigo desde otro TPT, haciendo una simple
> llamada a un método/función.
>
> Por ejemplo, si querés que desde tu tarea1 se codigo como si fuese la
> tarea2 la que lo ejecuta, tenés dos opciones:
>
> (a) Usar una Queue o Fifo para avisarle desde el otro TPT que haga la
> llamada:
>
> def tarea1(queue, queue2):
>    queue.append("llamá a raw_input")
>    y = queue2.pop()
>
> def tarea2(queue, queue2):
>    while 1:
>        x = queue.pop()
>        if x == "llamá a raw_input":
>            y = raw_input()
>            queue2.append(y)
>
> (b) Usar un proxy:
>
> def llamador_a_raw_input():
>    return raw_input()
>
> def tarea1(llamador):
>    # Acá se hace la magia para ejecutar raw_input en el TPT tarea2
>    y = llamador()
>
> def tarea2():
>    manager.serve_forever()
>
> def main():
>    llamador = manager.nuevo_proxy_a_una_funcion(llamador_a_raw_input)
>    proceso1 = nuevo_proceso(tarea1)
>    proceso2 = nuevo_proceso(tarea2)
>    proceso1.start()
>    proceso2.start()
>
> --
> Alejandro Santos
> _______________________________________________
> 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
>

Ante todo, gracias a todos por las respuestas!
La Queue, la tengo en mi ejemplo. No funciona, de alguna forma está creando
una instancia diferente. Veo que usás pop() y append() del objecto Queue.
Es un error? O es la versión de Python, porque yo no tengo esos métodos.
Voy a seguir investigando como pasar una instancia de una clase entre
procesos, no tendría que ser taaaaan dificil, será cuestión de que le tome
más la mano.

Saludos y gracias por todoooo
-------------------------------------
Martín Cerdeira - Software Developer
[web] http://www.codmacs.blogspot.com/
()  ascii ribbon campaign
/\  www.asciiribbon.org
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20111114/21d609a7/attachment.html>


More information about the pyar mailing list