Форум сайта python.su
Человек закрыл ссылку в браузере, но запрос ещё не отработал до render_to_response.
Как себя поведет вьюха в стандартном варианте? Как проверить?
Нужно, чтоб до конца отработка дошла - как реализовать?
Офлайн
ksПоставить в конце логгинг.
Как проверить?
Отредактировано odnochlen (Окт. 2, 2012 01:28:40)
Офлайн
ksА почему она должна себя как то вести по особенному? Откуда вьюха вообще может знать о том, что в браузере закрыли страницу? Функция она и есть функция, отработает и отдаст результат.
Человек закрыл ссылку в браузере, но запрос ещё не отработал до render_to_response.
Как себя поведет вьюха в стандартном варианте? Как проверить?
Нужно, чтоб до конца отработка дошла - как реализовать?
Офлайн
FishHookПых по умолчанию прибивает скрипт, если рвется соединение (наверно, это имел в виду ТС).
Откуда вьюха вообще может знать о том, что в браузере закрыли страницу?
Офлайн
Фронт-енд сервер (nginx, apache) первым получит сообщение о разрыве соединения.
Обычно фронт-енд настраивают так, чтобы он либо принудительно гасил обработчики запросов, либо передавал им специальный сигнал SIGPIPE (те сами его обработают как им нужно).
Соответственно,
1. вам нужно убедиться в нужной вам настройке фронта
2. ваше приложение должно нормально обрабатывать получаемый от фронта сигнал и ничего не писать в открытый ранее поток, чтобы не возникало исключение EPIPE.
PS
Дополнительная обработка EPIPE, наверное, не помешает.
Офлайн
Если запрос к web-серверу не умрёт по таймауту - view, естественно, закончит свою работу. Но если нужна гарантия выполнения задачи - для этих целей лучше использовать систему очередей, к примеру, http://hosting4django.net/blog/python/django/celery-redis. Но в отличии от статьи Вам больше подойдёт броккер RabbitMQ, т.к. он гарантирует выполнение задачи, в отличии от Celery.
Отредактировано daniel (Окт. 11, 2012 10:04:53)
Офлайн
+++ всем огромное спасибо, понял в каких направлениях копать.
Офлайн