[pyar] Duda, procesos e instancias

Alejandro Santos listas en alejolp.com
Lun Nov 14 16:13:02 ART 2011


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



More information about the pyar mailing list