[pyar] Duda, procesos e instancias

Martin Cerdeira martincerdeira en gmail.com
Mar Nov 15 08:45:01 ART 2011


2011/11/14 Martin Cerdeira <martincerdeira en gmail.com>

> 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
>

Finalmente, y yendo en contra de los fans de multiprocessing :-P lo
solucioné usando threads, como me habían sugerido.
La verdad es que, si bien no estoy re apurado con esto, ya tenía ganas de
sacar una versión que funcione para poder seguir.
Quizá, en otro momento vuelva a intentarlo con multiprocessing.

Saludos y gracias!
-------------------------------------
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/20111115/46f817ad/attachment.html>


More information about the pyar mailing list