Tengo un script de python que se ejecuta en mi servidor web. La función principal se invoca y cuando vuelve solo duerme durante unos segundos y se vuelve a llamar. Su propósito es recoger los nuevos videos subidos que los usuarios agregaron y convertirlos a webm, sacar el fotograma medio como una imagen y un montón de otras cosas funky. Estoy usando una llamada externa a ffmpeg. El siguiente clip de código muestra cómo lo llamo.Cómo verifica el estado o cancela un proceso externo con python
duration = output[durationIndex+10:durationIndex+18]
durationBits = duration.split(":")
lengthInSeconds = (int(durationBits[0])*60*60) + (int(durationBits[1])*60) + (int(durationBits[2]))
child = subprocess.Popen(["ffmpeg","-y","-i",sourceVideo,"-f","mjpeg","-vframes","1","-ss",str(lengthInSeconds/2),destination], shell=True, stderr=subprocess.PIPE)
output = ""
while True:
out = child.stderr.read(1)
if out == '' and child.poll() != None:
break
if out != '':
output += out
updateSQL = "update `videos_graduatevideo` set thumbnail = '" + str(destination) + "' where `original_video` = '" + sourceVideo + "'"
cursor.execute(updateSQL)
Este script se ejecuta en una máquina de Windows atm pero probablemente va a desplegar en un sistema Unix cuando es dev completa.
El problema es. Necesito este script python para seguir funcionando. Si algo sale mal con ffmpeg y se cuelga mi script, los videos subidos por el usuario simplemente se colocarán en un estado "pendiente" hasta que yo pise el script de python. Sé que cierto archivo mov que tengo hace ffmpeg colgar indefinidamente. ¿De alguna manera puedo verificar cuánto tiempo ha estado funcionando un proceso y luego matarlo si ha estado funcionando por mucho tiempo?
Tuve exactamente el mismo problema (estaba usando Pilones en lugar de Django). Escribí un programa externo con acceso a la base de datos (si le das la configuración de Django, puedes usar tus modelos) y un sistema de votación ajax para obtener el resultado. – JBernardo
¿Qué pasa con [apio] (http://celeryproject.org/)? Tiene soporte [de monitoreo] (http://celery.readthedocs.org/en/latest/userguide/monitoring.html). – danihp