【发布时间】:2016-06-29 08:57:56
【问题描述】:
我有一个 django 项目,其中允许用户一次启动多个子进程。这些过程可能需要一些时间,因此用户可以继续使用应用程序的其他方面。在任何情况下,用户都可以查看所有正在运行的进程并轮询其中任何一个以检查其是否结束。为此,我需要使用它的 pid 轮询进程。 Popen.poll() 需要一个 subprocess.Peopen 对象,而我所拥有的只是该对象的 pid。我怎样才能得到想要的结果?
在models.py中:
class Runningprocess(models.Model):
#some other fields
p_id=models.CharField(max_length=500)
def __str__(self):
return self.field1
在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
我只需要一个有效的语句而不是 'checkp = pid.poll()'
【问题讨论】:
-
您能否显示MCVE 以重现该问题。
-
查看已编辑的问题
-
不建议在您的特定情况下这是一个好主意,但要检查具有特定 PID 的进程是否正在运行,您可以使用
os.kill(pid, 0),如果没有具有该 PID 的进程,则会引发OSError正在运行。
标签: python django subprocess