2011-08-11 22 views
5

Tengo un script python que realiza solicitudes URL utilizando el urllib2. Tengo un grupo de 5 procesos que se ejecutan de forma asincrónica y realizan una función. Esta función es la que realiza las llamadas url, obtiene datos, los analiza en el formato requerido, realiza cálculos e inserta datos. La cantidad de datos varía para cada solicitud de url.monitorear procesos python pegados

Ejecuto este script cada 5 minutos con un trabajo cron. A veces, cuando hago ps -ef | grep python, veo procesos estancados. ¿Hay alguna manera en la que pueda hacer un seguimiento del significado de los procesos dentro de la clase de multiprocesamiento que puede hacer un seguimiento de los procesos, su significado de estado completado, atascado o muerto, etc.? Aquí es un fragmento de código:

Así es como me llamo procesa asíncrono

pool = Pool(processes=5) 
pool.apply_async(getData,) 

Y la siguiente es una parte de getData que realiza peticiones urllib2:

try: 
    Url = "http://gotodatasite.com" 

    data = urllib2.urlopen(Url).read().split('\n') 
except URLError, e: 
    print "Error:",e.code 
    print e.reason 
    sys.exit(0) 

¿Hay una manera de seguir procesos atascados y volver a ejecutarlos de nuevo?

+1

"stuck?" ¿Puedes explicar lo que esto significa? –

+0

¿Por qué necesita ejecutarlos con 'multiproccesing'? ¿Qué hay de malo con el uso de múltiples trabajos cron? –

+0

@Andrew: me refiero a procesos bloqueados. – ash

Respuesta

1

Implemente un mecanismo de ping si está dispuesto a usar multiprocesamiento. ¿Está buscando procesos que se hayan estancado debido a la E/S lenta, supongo?

Personalmente me gustaría ir con una cola (no necesariamente un servidor de cola de ), digo, por ejemplo, ~/jobs es una lista de URL para trabajar en, y luego tener un programa que toma el primer trabajo y lo realiza. Entonces es solo una cuestión de contabilidad, por ejemplo, tener la nota del programa cuando se inició y cuál es su PID. Si necesita eliminar trabajos lentos, simplemente elimine el PID y marque el trabajo como fallido.

0

Google para urllib2 y tiempo de espera. Si se alcanza el tiempo de espera, se obtiene una excepción y el proceso ya no está atascado.

Cuestiones relacionadas