Ich habe den folgenden Code in einem Python-Modul; Es verwendet den Subprozess zum Starten einer Befehlszeilen-App und liest die Ausgabe, die die App in stdout schreibt.Wie führe ich einen verzögerten Prozess-Timeout beim Aufruf von Django?
Wenn die Befehlszeilen-App nicht nach 15 Sekunden abgeschlossen ist, möchte ich, dass der Code Timeout. Ich habe signal.alarm verwendet, um dies zu erreichen.
Wenn Sie das Modul ohne Django testen, wird es wie erwartet nach 15s ablaufen. Wenn ich den Code aus einer Django-Ansicht heraus aufruft, wird er jedoch nicht nach 15 Sekunden ablaufen, sondern läuft weiter, bis der erzeugte Prozess abläuft.
Wie kann ich das tun, was ich will?
p = get_process() # spawns a process using subproccess and returns the process handle
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(15)
try:
s= p.stdout.read()
except:
p.kill()
s = "Operation timed out"
Vielleicht Django läuft Ihren Code in einem bestimmten Thread? Der Interrupt wird immer im Hauptthread auftreten, der möglicherweise nicht Ihr Code ist. –