Как предотвратить тайм-аут запроса FCGI в Джанго - PullRequest
2 голосов
/ 13 марта 2012

У меня есть веб-крючок, который занимает немного времени (около 5 минут).Тем не менее, запрос получает время ожидания примерно через 30 секунд.

Я нахожусь на общем хостинге с HostGator и использую FCGI для развертывания.

Я думаю, что запрос получает тайм-аут, так как нет HTTPResponseпока запрос не обработан.Если я смогу генерировать HTTPResponse из представления во время обработки запроса, сценарий сможет работать дольше.

[PS: Ранее я пробовал Google App Engine, где при использовании print 'hi' выводилось бы сообщение 'Привет в браузере, вместо того, чтобы войти.То же самое возможно с Джанго.Это может привести к отправке ответа, даже когда запрос завершен.] (мне сообщили в Django IRC, что даже если я смог получить печать для отправки сообщения в качестве ответа, он будет выдан только при возврате Httpresponse.) Таким образом, это былопредложил использовать Httpresponse с итерацией.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Ребята из IRC Django сказали использовать HttpResponse с генератором для непрерывной отправки вывода и, таким образом, для предотвращения простоя тайм-аута скрипта.

Код для использования Httpresponse с генератором был прекрасно описан здесь и здесь .

Спасибо всем!

2 голосов
/ 13 марта 2012

Тайм-аут в веб-сервере, а не в Django.Вы делаете запрос к веб-серверу и получаете от него ответ, поэтому вы не можете получить ничего кроме этого ответа.В вашем случае вы должны создать фоновую задачу на сервере, обычно начинающуюся с cron или celery (похоже, вы не можете запустить celery на hostgator, поэтому используйте cron) с очередью задач.На стороне клиента вы периодически отправляете запросы на сервер, используя AJAX, поэтому вы можете проверить состояние задачи и отобразить уведомление, если оно выполнено.

...