Подпроцесс Django - PullRequest
       6

Подпроцесс Django

2 голосов
/ 10 марта 2010

Мне очень жаль, если это дубликат, но я искал и не смог найти ответ.

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

---- ОБНОВЛЕНИЕ -----

Думаю, я мог бы это выяснить ..если я просто наберу p.start(), а НЕ p.join(), то процесс перенаправляется немедленно.Есть ли в этом что-нибудь опасное?

1 Ответ

3 голосов
/ 10 марта 2010

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

...