的index.html
<html>
<head>
<title>Demo</title>
</head>
<body>
<form action="" method="POST" name="form">
{% csrf_token %}
<div>
<input type ="submit" value = "start" name = "start" >
<input type ="submit" value = "stop" name = "stop" >
</div>
</form>
</body>
</html>
这里是使用线程的views.py文件,我也试过没有线程,但是当进程在django服务器启动时,它无法停止或杀死。
#views.py
import time
from django.shortcuts import render_to_response
import threading
class IndexView(generic.TemplateView):
template_name = 'demo/index.html'
def post(self,request,*args,**kwargs):
flag1 = request.POST.get("start")
if flag1 == "start":
flag = "start"
flag1 = request.POST.get("stop")
if flag1 == "stop":
flag = "stop"
def job_test(arg):
t = threading.currentThread()
while getattr(t, "do_run", True):
print ("working on %s" % arg)
time.sleep(1)
print("Stopping as you wish.")
t = threading.Thread(target=job_test, args=("task",))
if flag == "stop":
time.sleep(10)
if flag == "start":
time.sleep(0)
t.join()
没有线程
class IndexView(generic.TemplateView):
template_name = 'demo/index.html'
def post(self,request,*args,**kwargs):
flag1 = request.POST.get("start")
if flag1 == "start":
flag = "start"
flag1 = request.POST.get("stop")
if flag1 == "stop":
flag = "stop"
def job():
print("Processing Start..")
while flag == "start":
#job()
print ("job() call...")
demo_var1 = request.POST.get("stop")
if demo_var1 == "stop":
flag = "stop"
print("This is while flag inside : ",flag)
break
time.sleep(10)
我想在用户从浏览器按下开始按钮时开始处理,从按停止按钮停止该过程。
我不明白为什么代码不能分解。
请帮我找到解决方案。
提前致谢。
答案 0 :(得分:1)
你不能打破while
语句,因为该函数没有重新生成(卡在while
语句中。单击该按钮将再次实例化IndexView
类。
您需要将flag
设为全局变量,因此它对所有实例都是相同的值。这真的很糟糕。网站效应是例如所有运行(在while循环中)的用户都将退出:)
答案 1 :(得分:0)
对于多个进程,您可以在DB中存储标志,当您想要停止单独的进程时,请更改标志。