Мне нужно запустить процесс, который может занять несколько часов из представления 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 с минимальными потерями? Или я что-то не так делаю?