【问题标题】:can't stop process when it running on django在 django 上运行时无法停止进程
【发布时间】:2016-06-21 10:38:53
【问题描述】:

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)

当用户从浏览器按下开始按钮时,我想启动进程,按下停止按钮停止该进程。

我不明白为什么代码不能在while中中断。

请帮我找到解决办法。

提前致谢。

【问题讨论】:

  • 通常,对于长任务,您会使用完全独立的进程,例如celery.

标签: django multithreading python-3.x data-structures while-loop


【解决方案1】:

您不能中断while 语句,因为该函数不会重新运行(卡在while 语句中。单击该按钮将再次实例化IndexViewclass。

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

【讨论】:

  • 我正在尝试通过 mongodb 中的变量作为标志来停止进程,当我按下停止时,标志(mongodb)变量的值将 true 更改为 false,我正在处理多个进程,如何我在while循环中检查标志(mongodb)变量的值?
  • 是的,你可以在循环中检查值,但你需要去另一个视图改变DB值。我会选择LoopView(你有循环)和ButtonView,你会在其中触发数据库更改。你可以拥有从LoopViewPOSTButtonView 的HTML。
【解决方案2】:

对于多个进程,您可以将标志存储在数据库中,当您想停止单独的进程时,然后更改标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2016-01-03
    • 1970-01-01
    • 2011-04-11
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多