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