[pyar] Dependencias, threading.Event y sincronizacion

Andres Riancho andres.riancho en gmail.com
Vie Mayo 24 20:05:53 ART 2013


Pyar,

    Estoy actualmente armando un software que corre una serie de
tareas que son "parcialmente dependientes" entre ellas, por lo que las
ejecuto secuencialmente. Lamentablemente esto lleva mucho tiempo y hay
cosas que me gustaria paralelizar; y por ese lado viene la pregunta.

    Vamos con un ejemplo para que se entienda.

Tarea A:
    Subtarea A1
    Subtarea A2
    Subtarea A3

Tarea B:
    Subtarea B1
    Subtarea B2
    Subtarea B3: Para iniciar subtarea A2 debe haber terminado

Tarea C:
    Subtarea C1
    Subtarea C2: Para iniciar subtarea A3 y subtarea B3 deben haber terminado
    Subtarea C3

    Hoy por hoy lo que hago es ejecutar A() , B() , C(). El problema
de esto es que los tiempos de ejecucion se hacen largos (nada que ver
con IO o CPU usage), entonces estaba buscando una solucion para
ejecutar esto en paralelo, cual les parece la mejor solucion?

    De mi investigacion me parecio que se podria usar
threading.Event() y threads de la siguiente manera:

evento_a2_finalizado = threading.Event()
evento_a3_b3_finalizados = threading.Event()
threading.Thread(target=A).start()
threading.Thread(target=B).start()
threading.Thread(target=C).start()

    Internamente cuando termina A2 hago un set() de
`evento_a2_finalizado` y en B3 hago un `evento_a2_finalizado.wait()`.
Algo similar con el otro evento. De esta manera se ejecutan en
paralelo varias cosas y gano tiempo.

    Es la primera vez que me topo con un problema como estos, alguien
con experiencia en Events para contarme que le parece? Otro metodo
para resolver el problema?

    Gracias!

Saludos,
--
Andrés Riancho
Project Leader at w3af - http://w3af.org/
Web Application Attack and Audit Framework
Twitter: @w3af
GPG: 0x93C344F3



More information about the pyar mailing list