2010-12-01 2 views
2

У меня есть форма на моем сайте, которая загружает файл. В настоящее время я загружаю файл на amazon S3 перед отправкой ответа пользователю. Есть ли способ в Django отправить ответ «Успех» пользователю сразу после сохранения файла на моем локальном сервере, но прежде чем я начну сохранять его на s3?Вернуть ответ http до завершения фактической функции

+0

Я чувствую, что это будет грязный хак. Я могу представить только одно решение, которое будет делать именно то, что вы хотите. Вы можете отправить результат по частям. Конечно, вы не можете просто вернуть часть html, потому что сокет будет закрыт после него, поэтому вам нужно будет писать непосредственно в сокет, когда вам это нужно. Этот метод называется «длинный опрос», но я не могу об этом говорить без сервера «торнадо». Извините, если мой текст запутан, я не знаком с английским. – werehuman 2010-12-01 19:26:17

ответ

1

Вы должны использовать distributed task queue.

Поскольку вы используете AWS уже, вы можете рассмотреть их альтернативу: Amazon SQS.

0

Я считаю, что лучшей практикой здесь было бы добавить файл (путь, информация) в очередь, для перехода на S3 в более позднем процессе. Примите файл, отправьте сообщение об успешном завершении и «отправьте его в облако» позже. Что-то работает cron, или какая-то другая регулярно встречающаяся ситуация типа «задача».

Это, конечно же, зависит от того, что вы делаете с файлом, и в каком-то другом контексте.

1

Я на самом деле делаю что-то подобное, для этого я использую библиотеку многопроцессорности python для обработки загрузки файла на s3. Поэтому, как только я получаю запрос, я запускаю процесс обработки файлов, а затем мгновенно возвращаю ответ успеха пользователю. В зависимости от того, сколько нагрузки на сервер вы планируете испытать, может быть лучше, если вы будете обрабатывать загрузку файла на s3 с помощью системы очередей, но для запуска сайта или с низкими ударами это должно быть хорошо.

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