Ho uno script python che viene eseguito sul mio server web. La funzione principale viene chiamata quindi quando viene restituita, rimane in attesa per alcuni secondi e viene richiamata di nuovo. Lo scopo è raccogliere nuovi video caricati che gli utenti hanno aggiunto e convertirli in webm, estrarre il frame centrale come un'immagine e un mucchio di altre cose funky. Sto usando una chiamata esterna a ffmpeg. Il codice clip qui sotto mostra come lo chiamo.Come si controlla lo stato o si elimina un processo esterno 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)
Questo script è in esecuzione su una macchina Windows atm ma probabilmente distribuire su un sistema Unix quando è dev completa.
Il problema è. Ho bisogno di questo script python per continuare a funzionare. Se qualcosa va storto con ffmpeg e il mio script si blocca, i video caricati dall'utente rimarranno in uno stato "in sospeso" fino a quando non vado a colpire lo script python. So che un certo file mov che ho rende ffmpeg sospeso indefinitamente. È in qualche modo possibile verificare per quanto tempo è stato eseguito un processo e poi eliminarlo se è stato eseguito troppo a lungo?
Ho avuto esattamente lo stesso problema (stavo usando piloni invece di Django). Ho scritto un programma esterno con accesso al database (se le dai impostazioni Django, puoi usare i tuoi modelli) e un sistema di polling ajax per ottenere il risultato. – JBernardo
Che dire di [sedano] (http://celeryproject.org/). Ha il supporto [monitoring] (http://celery.readthedocs.org/en/latest/userguide/monitoring.html). – danihp