웹 서버에서 실행되는 python 스크립트가 있습니다. main 함수가 호출되면 반환 할 때 몇 초간 잠자기 후 다시 호출됩니다. 사용자가 추가 한 새로운 업로드 동영상을 픽업하여 webm으로 변환하고 중간 프레임을 이미지와 다른 펑키 한 자료로 가져 오는 것이 목적입니다. ffmpeg에 외부 호출을 사용하고 있습니다. 아래 코드는 제가 어떻게 호출하는지 보여줍니다.상태를 확인하거나 파이썬으로 외부 프로세스를 죽이는 방법
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)
이 스크립트는 Windows 컴퓨터 atm에서 실행되고 있지만이 스크립트는 개발이 완료되면 유닉스 시스템에 배포 할 예정입니다.
문제가 있습니다. 계속 실행하려면이 python 스크립트가 필요합니다. ffmpeg에 문제가 생겨 스크립트가 중단되면 사용자가 업로드 한 비디오는 파이썬 스크립트를 찌를 때까지 "보류 중"상태로 유지됩니다. 나는 내가 가지고있는 특정 mov 파일이 ffmpeg를 무기한으로 기다리는 것을 안다. 프로세스가 실행 된 시간을 확인하고 너무 오래 실행 한 경우 프로세스를 종료 할 수 있습니까?
정확히 똑같은 문제가있었습니다 (장고 대신 파이론을 사용했습니다). 필자는 데이타베이스 액세스 (장고 설정을 주면 모델을 사용할 수 있음)와 아약스 폴링 시스템을 사용하여 외부 프로그램을 작성하여 결과를 얻습니다. – JBernardo
[셀러리] (http://celeryproject.org/)는 어떨까요? [모니터링] (http://celery.readthedocs.org/en/latest/userguide/monitoring.html)을 지원합니다. – danihp