can';t在django上运行时停止进程

can';t在django上运行时停止进程,django,multithreading,python-3.x,data-structures,while-loop,Django,Multithreading,Python 3.x,Data Structures,While Loop,index.html <html> <head> <title>Demo</title> </head> <body> <form action="" method="POST" name="form"> {% csrf_token %} <div> <in

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>
无螺纹

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)
我想在用户从浏览器按开始按钮时启动进程,从按停止按钮停止该进程

我不明白为什么代码不能在运行时插入

请帮我找到解决办法


提前谢谢

您不能打断
while
语句,因为函数没有重新返回(卡在
while
语句中)。单击按钮将再次实例化
IndexView


您需要将
flag
设置为全局变量,以便所有实例的值都相同。这真的很糟糕。站点效应是,所有正在运行(在while循环中)的用户都将退出:)

对于多个进程,您可以将flag存储在DB中,并且当您想要停止单独的进程时,可以更改flag。

正常情况下,对于长时间的任务,您将使用一个完全独立的进程,例如,我试图通过mongodb中的变量作为标志来停止进程,当我按下stop按钮时,那么标志(mongodb)变量的值将变为true至false,我正在处理多个进程,如何在while循环中检查标志(mongodb)变量的值?是,您可以检查循环中的值,但需要转到另一个视图来更改DB值。我将使用一个
循环视图
(在这里有循环)和一个
按钮视图
,在这里触发DB更改。您可以使用
POST
将HTML从
LoopView
发送到
按钮view
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)