在django上运行时无法停止进程

时间:2016-06-21 10:38:53

标签: 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>
                <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)

我想在用户从浏览器按下开始按钮时开始处理,从按停止按钮停止该过程。

我不明白为什么代码不能分解。

请帮我找到解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:1)

你不能打破while语句,因为该函数没有重新生成(卡在while语句中。单击该按钮将再次实例化IndexView类。

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

答案 1 :(得分:0)

对于多个进程,您可以在DB中存储标志,当您想要停止单独的进程时,请更改标志。