Мне нужно запустить процесс, который может занять несколько часов с представлением Django. Мне не нужно знать состояние или общаться с ним, но мне нужно, чтобы это представление перенаправлялось сразу после запуска процесса.
Я пробовал использовать subprocess.Popen
, используя его в новом threading.Thread
, multiprocessing.Process
. Тем не менее, родительский процесс продолжает зависать до тех пор, пока ребенок не завершится. Единственный способ, который почти делает это, - использовать вилку. Очевидно, что это не так хорошо, поскольку он оставляет процесс зомби позади, пока родитель не закончит.
То, что я пытаюсь сделать при использовании fork:
if os.fork() == 0:
subprocess.Popen(["/usr/bin/python", script_path, "-v"])
else:
return HttpResponseRedirect(reverse('view_to_redirect'))
Итак, есть ли способ запустить полностью независимый процесс из представления Django с минимальными потерями? Или я делаю что-то неправильно?