Verwendung: Django mit PythonPython Thema nicht die Rückgabe des Werts
Geordnetes Ziel: eine Funktion aufrufen, die Video-Konvertierung verarbeitet (intern macht einen curl Befehl an den Server-Medien) und sollten sofort zurück an den Benutzer zurück.
Verwenden der Nachrichtenwarteschlange wäre ein Overkill für die App. So hatte ich beschlossen Threads zu verwenden, ich habe eine Klasse geschrieben, die die init und run-Methode überschreibt und rufen den curl Befehl
class process_video(Thread):
def __init__ (self,video_id,video_title,fileURI):
Thread.__init__(self)
self.video_id = video_id
self.video_title = video_title
self.fileURI = fileURI
self.status =-1
def run(self):
logging.debug("FileURi" + self.fileURI)
curlCmd = "curl --data-urlencode \"fileURI=%s\" %s/finalize"% (self.fileURI, settings.MEDIA_ROOT)
logging.debug("Command to be executed" + str(curlCmd))
#p = subprocess.call(str(curlCmd), shell=True)
output_media_server,error = subprocess.Popen(curlCmd,stdout = subprocess.PIPE).communicate()
logging.debug("value returned from media server:")
logging.debug(output_media_server)
Und ich instanziiert diese Klasse von einer anderen Funktion aufgerufen createVideo , die wie diese success = process_video(video_id, video_title, fileURI)
nennen
Problem: Der Benutzer wird zurück zu der anderen Ansicht von der CreateVideo weitergeleitet und der ProcessVideo wird aufgerufen, aber aus irgendeinem Grund der erstellte Thread (Prozessvideo) nicht auf die Ausgabe vom Medienserver warten.
Ich brauche ein paar weitere Informationen hier. Wie sieht der Code aus, der 'process_video' verwendet? Ich gehe davon aus, dass Sie etwas mehr tun, als nur eine Instanz von 'process_video' zu erstellen. – Arlaharen
fügen Sie 'stderr = PIPE' hinzu und protokollieren Sie den' Fehler'. – jfs
subprocess.Popen Aufruf scheint zu stecken, da es keinen Fehler oder keine Ausgabe zu protokollieren scheint. Ich habe auch die Protokolle des Medienservers überprüft und es werden keine Anrufe getätigt. Das Einrichten der Instanz von process_video als Daemon hilft auch nicht. Irgendwelche Ideen? –