[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