У меня есть html.app, который запрашивает асинхронно для своей модели данных JSON от CherryPy Backend. Размер данных JSON несколько крупнее 1,74 МБ. Загрузка и визуализация данных занимает около 1 секунды. Приложение работает отлично, автономно. Однако, когда я прикрепляю его к веб-серверу Apache через mod_wsgi, я сразу же начал замечать проблемы.CherryPy: нужна помощь при обработке исключений
Когда HTML страница обновляется до соединения данных является закрытым mod_wsgi вызывает его позорный
mod_wsgi (pid=917): Exception occurred processing WSGI script '/myapp_path/WebApp.py'
IOError: failed to write data, referer: https://domain/etc/padmin/
ENGINE Started monitor thread 'Session cleanup'.
ENGINE Started monitor thread 'Session cleanup'.
Я понимаю, Apache закрывает соединение данных перед WSGI имеет возможность перекачивать данные в полном объеме к клиенту. Это не большое дело, но оно вызывает какое-то внутреннее исключение, которое я не могу ловить в ловушку или не знаю, как это сделать. Поведение CherryPy по умолчанию заключается в сбросе сеанса, если возникает неполученное исключение. Мне нужно изменить поведение CherryPy, чтобы он не перезапускал активный сеанс, когда клиент решает не ждать завершения данных. Я предпочел бы ловушку и подавление решения исключения mod_wsgi, но если это не возможно, я бы предпочел предотвратить действие «Очистка сеанса», если возникает неполученное исключение. Любая помощь будет принята с благодарностью.
Обновление: Я проследил свою проблему с неправильно настроенным типом хранения сеанса. Предполагалось, что это file
, но из-за незаконной стоимости он стал по умолчанию ram
. Проблема была решена.
Это не Apache, закрывающее соединение, а HTTP-клиент, который это делает. –
@GrahamDumpleton Я думаю об изменении вашего кода, чтобы игнорировать это событие. Я просто не вижу, как приложения ajax или потоковые приложения могут работать с CherryPy с этим. – bioffe
При его изменении вы нарушаете спецификацию WSGI. Если вы не используете обратный вызов WSGI write(), что маловероятно, вы никогда не увидите это исключение в своем приложении WSGI, поэтому я думаю, что вы должны что-то неправильно истолковывать. –