Ich habe ein Django-Projekt, in dem ein Benutzer mehrere Subprozesse gleichzeitig starten kann. Die Prozesse können einige Zeit dauern und somit kann der Benutzer mit anderen Aspekten der App weiterarbeiten. In jedem Fall kann der Benutzer alle laufenden Prozesse ansehen und einen von ihnen abfragen, um zu überprüfen, ob es vorbei ist. Dafür muss ich den Prozess mit seiner PID abfragen. Popen.poll() erwartet ein subprocess.Peopen-Objekt, während alles, was ich habe, die PID dieses Objekts ist. Wie kann ich das gewünschte Ergebnis erzielen?Abruf eines Subprozesses mit Hilfe von pid
in models.py:
class Runningprocess(models.Model):
#some other fields
p_id=models.CharField(max_length=500)
def __str__(self):
return self.field1
In views.py:
def run_process():
....
p= subprocess.Popen(cmd, shell =True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
new_p=Runningprocess()
new_p.p_id=p.pid
....
new_p.save()
return HttpResponseRedirect('/home/')
def check(request,pid):
#here i want to be able to poll the subprocess using the p_id e.g something like:
checkp = pid.poll() #this statement is wrong
if checkp is None:
do something
else:
do something else
Ich brauche nur eine gültige Anweisung anstelle von 'checkp = pid.poll()'
Können Sie ein [MCVE] (http://stackoverflow.com/help/mcve) anzeigen, um das Problem zu reproduzieren. – Cyrbil
Sehen Sie die bearbeitete Frage –
Nicht vorschlagen, das ist eine gute Idee in Ihrem speziellen Fall, aber um zu überprüfen, ob ein Prozess mit einer bestimmten PID ausgeführt wird, können Sie 'os.kill (pid, 0)' verwenden, was "OSError" if Kein Prozess mit dieser PID wird ausgeführt. – Aya