1

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 файл, используя многопоточность, я также попытался без резьбы, но при запуске процесса в Джанго сервере, он не может остановить или убийство.

#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

Обычно для длительных задач вы должны использовать полностью отдельный процесс, например. [Сельдерей] (http://www.celeryproject.org/). –

ответ

1

Вы не можете разбить в while заявление, потому что функция не redurn (застревает в while заявлении. При нажатии на кнопку будет создать экземпляр снова IndexView класс.

Вы должны были бы сделать flag глобальная переменная, так что это одинаковое значение для всех экземпляров. Это очень плохо. Эффект сайта - это, например, то, что все пользователи, у которых есть что-то работает (в цикле while), выйдут :)

+0

Я пытаюсь остановить процесс через переменную в mongodb в качестве флага, когда я нажимаю на остановку, тогда значение переменной flag (mongodb) изменяется в true для false, я работаю с несколькими процессами, как я могу проверить значение флага (mongodb) переменная в цикле while? –

+0

Да, вы можете проверить значение в цикле, но вам нужно перейти в другое представление, чтобы изменить значение DB. Я бы пошел с «LoopView» (где у вас есть цикл) и «ButtonView», где вы запускаете изменение БД. вы можете получить HTML из «LoopView» с «POST» в «ButtonView». –

+0

Спасибо за помощь .. –

0

Для нескольких процессов вы можете хранить флаг в БД и когда вы хотите остановить отдельный процесс, измените флаг.

Смежные вопросы