Я пытаюсь разработать, как выполнить процесс в фоновом потоке в Django. Я плохо знаком с Django и для потоками, поэтому терпите меня, если я использую терминологию неправильно.
Вот код, который я имею. В основном я хотел бы start_processing
начаться как только success
функция инициирована. Однако start_processing
вид функции, которая могла легко занять несколько минут или сбоя (это зависит от внешнего сервиса, над которым я не имею никакого контроля), и я не хочу, чтобы пользователь должен был ожидать его для завершения успешно, прежде чем представление будет представлено. ('Успех', что касается их, не зависит от результата start_processing
; Я - единственный человек, который должен волноваться, перестало ли это работать.)
def success(request, filepath):
start_processing(filepath)
return render_to_response('success.html', context_instance = RequestContext(request))
От Гугления я сделал, большинство людей предполагает, что фоновые потоки не используются в Django, и вместо этого задание крона более подходит. Но я вполне хотел бы start_processing
начаться, как только пользователь добирается до функции успеха, вместо того, чтобы ожидать до прогонов задания крона. Существует ли способ сделать это?
Я не уверен, что вам нужна ветка для этого. Похоже, вы просто хотите запустить процесс, поэтому загляните в модуль подпроцесса
.
IIUC, проблема в том, что процессу веб-сервера могут не нравиться дополнительные длительные потоки, он может убивать / порождать серверные процессы по мере увеличения или уменьшения спроса и т. д. и т. д.
Для этого типа обработки вам, вероятно, лучше будет взаимодействовать с процессом внешней службы, чем встраивать его в процесс wsgi / fastcgi веб-сервера.
Если единственное, что вы отправляете, - это путь к файлу, написать это сервисное приложение должно быть довольно легко.