Мне очень жаль, если это дубликат, но я искал и не смог найти ответ.Подпроцесс Django
В Django я хочу сделать что-то подобное (см комментарии):
# we have a file in our database...
v = create_file_entry(clean_data, ip_address)
# next, start a *background process* to upload the file somewhere else...
p = Process(target=upload_file, args=(filepath,v))
p.start()
p.join()
# ...we don't care about the result of the process, or
# wait for it to finish, just redirect the user to success *immediately*
return HttpResponseRedirect('/success/')
Я хочу код, чтобы начать процесс upload_file, а затем перенаправить пользователя на страницу успеха сразу, в то время как upload_file
процесс работает в фоновом режиме (он медленный). Я думал, что подпроцесс может это сделать.
К сожалению, приведенный выше код, похоже, ждет завершения процесса upload_file
перед заголовком перед перенаправлением пользователя на страницу успеха, что не является тем, что мне нужно.
Обратите внимание, что upload_file
является функцией Python в моем файле views.py
. Я слышал о popen
. Думаю, я мог бы преобразовать def upload_file
в автономный скрипт Python и запустить его из командной строки - будет ли он запускаться, а затем сразу же перенаправить пользователя, как я хочу? Или я должен использовать какой-то поток/процесс?
---- UPDATE -----
Я думаю, что я мог бы понял это ... если я просто p.start()
и НЕ p.join()
, то процесс перенаправления немедленно. Есть ли что-то опасное в этом отношении?
Спасибо, но мне на самом деле не нужно общаться с ним или знать, каков результат. Мне просто нужно это начать. Неужели должен быть простой способ сделать это? – AP257
... под которым я подразумеваю, начните, а затем позвольте мне перенаправить пользователя БЕЗ ожидания результата. Нить? Обработать? Popen? Помогите! – AP257
Положите сообщение в очередь. Демон затем подбирает его по своему усмотрению и обрабатывает его. –