2010-03-10 4 views
2

Мне очень жаль, если это дубликат, но я искал и не смог найти ответ.Подпроцесс 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(), то процесс перенаправления немедленно. Есть ли что-то опасное в этом отношении?

ответ

3

Рассмотрите возможность написания отдельного демона для обработки и связи с ним через очередь сообщений.

+0

Спасибо, но мне на самом деле не нужно общаться с ним или знать, каков результат. Мне просто нужно это начать. Неужели должен быть простой способ сделать это? – AP257

+0

... под которым я подразумеваю, начните, а затем позвольте мне перенаправить пользователя БЕЗ ожидания результата. Нить? Обработать? Popen? Помогите! – AP257

+0

Положите сообщение в очередь. Демон затем подбирает его по своему усмотрению и обрабатывает его. –

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