2013-09-24 2 views
3

Я работаю над веб-приложением django, которое имеет функции (скажем, например, sync_files()), которые требуют много времени для возврата. Когда я использую gevent, мое приложение не блокируется при запуске sync_file(), и другие клиенты могут подключаться и взаимодействовать с webapp просто отлично.Нужен ли мне сельдерей, когда я использую gevent?

Моя цель - заставить Webapp реагировать на других клиентов, а не блокировать. Я не ожидаю, что пользователи zillion подключатся к моему webapp (возможно, максимум 20 подключений), и я не хочу, чтобы это стало очередным твиттером. Мое приложение работает на vps, поэтому мне нужно что-то легкое.

В моем случае, указанном выше, излишне использовать сельдерей, когда я использую gevent? Существует ли конкретное преимущество использования сельдерея? Я предпочитаю не использовать сельдерей, потому что это еще одна услуга, которая будет работать на моей машине.

изменить: выяснили, что сельдерей может запустить рабочий бассейн на gevent. Я думаю, что я больше не уверен в отношении отношения между сельдереем.

ответ

3

Короче говоря, вам нужен сельдерей.

Даже если вы используете gevent и имеете параллелизм, проблема становится таймаутом запроса. Допустим, что ваша задача занимает 10 минут, однако типичный тайм-аут запроса составляет около минуты. Итак, что произойдет, если вы запускаете задачу непосредственно в представлении, так это то, что сервер начнет ее обрабатывать, однако через минуту клиент (браузер), вероятно, отключит соединение, так как будет считать, что сервер отключен. В результате ваши данные могут стать поврежденными, так как вы не можете гарантировать, что произойдет, когда соединение закроется. Сельдерей решает это, потому что это вызовет фоновый процесс, который будет обрабатывать задачу независимо от представления. Таким образом, пользователь сразу получит ответ на просмотр, и в то же время сервер начнет обработку задачи. Это правильный шаблон для обработки любых сценариев, требующих большой обработки.

+0

Спасибо за ответ. В настоящее время я использую RQ из python-rq.org для очередей ... Правильно ли я считаю, что сельдерей и RQ выполняют подобные функции (не вдаваясь в архитектурные различия)? Я должен был добавить примечание о RQ в мой вопрос - извините. – Trewq

+2

есть. они гипотетически выполняют ту же/подобную вещь. – miki725

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