[pyar] usando multiprocessing

Anielkis Herrera anielkis en gmail.com
Jue Dic 12 13:03:28 ART 2013


ahh!! muchas gracias!!! realizaré esos cambios, gracias
Salu2,


El 12 de diciembre de 2013 10:41, Hernan
Grecco<hernan.grecco en gmail.com>escribió:

> Hola Anielkis,
>
>
> Por lo que veo FilesSender no guarda ningun estado. Podrias hacer esto
> mas facil usando concurrent.futures [0]. Esto te permite cambiar de
> threads a procesos facilmente segun el tipo de carga que tengas y
> debugear es mas facil.
> A menos que realmente necesites tener varios procesos abiertos
> escuchando un queue, la opcion que te propongo es mas simple.
>
> Algunos comentarios extras:
> 1.- Cuando haces logger.debug o logger.info, no es necesario que
> escribas: '[DEBUG]' e '[INFO]'. Eso ya está en la registro de log y lo
> podés mostrar cambiando el log formatter, agregando levelname. Lee [1]
> 2.- Cambia todo los print "algo" a print("algo") asi ya lo tenes listo
> para python 3.
> 3.- Cambia: "if len(fileList) > 0:" por ïf len(fileList)" o mejor aun
> "if fileList" (si fileList realmente es un objeto cuyo valor booleano
> es True cuando no está vacio.
> 4.- yo prefiero hacer "logger = logging.getLogger(__name__)" al
> principio y evitar "global logger"
> 5.- En Python 3.3+, la funcion checkout de subprocess tiene un
> argument timeout. En python 2, podes usar [2]
>
> Hernán
>
> [0] http://docs.python.org/3/library/concurrent.futures.html
> [1] http://docs.python.org/2/howto/logging.html#configuring-logging
> [2] https://pypi.python.org/pypi/subprocess32/
>
>
> 2013/12/12 Anielkis Herrera <anielkis en gmail.com>:
> > gracias por responder tan rápido, Hernan .. por lo visto pueden pasar
> 1000
> > veces lo mismo.. y a las 1000+1 verse de forma distinta.. solucioné el
> > problema y .. es un poco extraño.. tenía, como "en la vieja escuela",
> prints
> > antes y después de cada sección crítica, incluso con ese join(línea 131)
> y
> > nunca se mostraba el de después del join .. volví a revisar el código y
> > luego de esa línea tenía un join de una antigua queue.. y daba una
> > excepción, pero tampoco me llegaba a salir el print de la excepción..
> > eliminándolo.. todo fluyó
> >
> > no obstante, aqui está el gist:
> https://gist.github.com/DimShadoWWW/7929379
> > aún debo tener "varios" problemas ahi y varias "mejores formas" de
> hacerlo,
> > me gustaría saber sus opiniones.. pues si algo he aprendido.. es que
> > mientras más se aprende.. más cosas "se ve que" faltan por aprender
> >
> > muchas gracias,
> >
> >
> > El 12 de diciembre de 2013 09:49, Hernan Grecco<hernan.grecco en gmail.com>
> > escribió:
> >
> >> Hola Anielkis,
> >>
> >> Podes subir el programa completo a gist de github?
> >>
> >> Hernan
> >>
> >>
> >>
> >> 2013/12/12 Anielkis Herrera <anielkis en gmail.com>:
> >> > Hola, buenos días.. les escribo porque llevo varios días intentando
> >> > implementar un sistema de gestión de procesos usando multiprocessing y
> >> > sigo
> >> > teniendo un problema con las queues de multiprocessing.. el sistema
> >> > funciona
> >> > de esta forma:
> >> >
> >> > tengo un proceso que revisa una tabla en una base de datos y según la
> >> > información, la inserta en una queue de tipo
> >> > multiprocessing.JoinableQueue(), luego creo otra "de resultados" de
> tipo
> >> > multiprocessing.Queue() donde se almacenarán los "resultados de los
> >> > procesos" que procesarán la primera.
> >> >
> >> > tengo una clase: "class Worker(multiprocessing.Process)" donde en el
> >> > método
> >> > run defino lo que deseo hacer con la queue (llamando a
> >> > inqueue.task_done()
> >> > siempre que termina el proceso ) que básicamente executa comandos por
> >> > subprocess.popen ..
> >> > e invoco a esa clase de esta forma:
> >> >
> >> > consumers = [ Worker(inqueue, outqueue)
> >> >                   for i in xrange(10) ]
> >> >
> >> > for w in consumers:
> >> >     w.start()
> >> >
> >> > inqueue.join()  # <---- aqui es donde se queda
> >> >
> >> > ...........
> >> > el problema es que todo funciona bien, hasta el .join de la
> >> > JoinableQueue,
> >> > incluso, si hago "print inqueue.qsize()" antes del join, poniendo una
> >> > espera
> >> > de tiempo, para que el Worker termine la tarea que le puse.. y el
> qsize
> >> > dice
> >> > que tiene 0 en la queue .. se queda ahi, esperando y no continúa..
> >> >
> >> > llevo varios día probando, incluso, usé multiprocessing.Queue() en esa
> >> > queue, y usé un método en vez del Worker, con una lista de procesos
> >> > Worker y
> >> > un jopin al final y aún así se queda esperando, en el join
> >> >
> >> > traté de explicarme lo mejor posible.. la verdad es que llegué a
> >> > "bloquearme" .. y ya no sé qué más probar en ese código... sé que esto
> >> > es
> >> > fácil hacerlo con herramientas como celery, pero no me es posible
> usarla
> >> > en
> >> > estos momentos.. y he estado revisando la documentación que he
> >> > encontrado en
> >> > internet y no encuentro ninguna otra pista que seguir
> >> >
> >> > el entorno donde debe funcionar es un centos 6, que tiene python
> 2.6.6 y
> >> > lo
> >> > he probado hasta python 2.6.8 y siempre mantiene el comportamiento
> >> >
> >> > alguna idea que deba revisar? muchas gracias de antemano
> >> >
> >> > --
> >> > _______________________________
> >> >         Anielkis Herrera González
> >> >
> >> > _______________________________________________
> >> > 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
> >> _______________________________________________
> >> 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
> >
> >
> >
> >
> > --
> > _______________________________
> >         Anielkis Herrera González
> >
> > _______________________________________________
> > 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
> _______________________________________________
> 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
>



-- 
_______________________________
        Anielkis Herrera González
           Ingeniero Informático
_______________________________
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20131212/7fe38941/attachment.html>


More information about the pyar mailing list