Tôi có một tập lệnh python chạy trên máy chủ web của tôi. Chức năng chính được gọi sau đó khi nó trả về nó chỉ ngủ trong vài giây và được gọi lại. Mục đích của nó là chọn bất kỳ video tải lên mới nào mà người dùng đã thêm và chuyển đổi chúng thành webm, kéo khung giữa làm hình ảnh và một loạt các nội dung thú vị khác. Tôi đang sử dụng một cuộc gọi bên ngoài để ffmpeg. Đoạn mã dưới đây cho thấy cách tôi gọi nó.Làm thế nào để bạn kiểm tra trạng thái hoặc giết một quá trình bên ngoài với 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)
Tập lệnh này chạy trên máy tính Windows nhưng có lẽ tôi sẽ triển khai nó trên hệ thống Unix khi hoàn tất.
Vấn đề là. Tôi cần tập lệnh python này để tiếp tục chạy. Nếu có sự cố với ffmpeg và tập lệnh của tôi bị treo, video do người dùng tải lên sẽ chỉ ở trạng thái "đang chờ xử lý" cho đến khi tôi đọc kịch bản lệnh python. Tôi biết một tập tin mov nhất định tôi đã làm cho ffmpeg treo không chính xác. Có someway tôi có thể kiểm tra bao lâu một quá trình đã được chạy và sau đó giết nó đi nếu nó đã được chạy quá lâu?
Tôi đã có cùng một vấn đề chính xác (tôi đã sử dụng giá treo thay vì Django). Tôi đã viết một chương trình bên ngoài với truy cập cơ sở dữ liệu (nếu bạn đặt cho nó cài đặt Django, bạn có thể sử dụng các mô hình của bạn) và một hệ thống bỏ phiếu ajax để có được kết quả. – JBernardo
Còn về [cần tây] (http://celeryproject.org/). Có hỗ trợ [giám sát] (http://celery.readthedocs.org/en/latest/userguide/monitoring.html). – danihp