2013-11-16 5 views
1

У меня есть 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. Проблема была решена.

+1

Это не Apache, закрывающее соединение, а HTTP-клиент, который это делает. –

+0

@GrahamDumpleton Я думаю об изменении вашего кода, чтобы игнорировать это событие. Я просто не вижу, как приложения ajax или потоковые приложения могут работать с CherryPy с этим. – bioffe

+1

При его изменении вы нарушаете спецификацию WSGI. Если вы не используете обратный вызов WSGI write(), что маловероятно, вы никогда не увидите это исключение в своем приложении WSGI, поэтому я думаю, что вы должны что-то неправильно истолковывать. –

ответ

1

Я программирую python, поэтому я не уверен, как html обрабатывает исключения, но для этого требуется система «попробуйте и поймать». Это означает, что вы можете попробовать выполнить какой-то код, и если он не сработает, вы можете сделать что-то еще. Вы также можете указать, какая ошибка вызовет вторую часть кода. Вот пример python:

try: 
    #do something here 
except IOError, e: 
    #in the event of an IO error, do this, e is a variable you can choose to pass in that gives details about the error 
except SystemExit: 
    #another python exception 
finally: 
    #it is possible that html also supports a finally. Basically, no matter if it executes the try or one of the exception handlers, it will finish by doing this no matter what. 
+0

Я ценю ваши отзывы. Посмотрите на часть обновления моего вопроса. – bioffe

+0

Наконец, поддержка - это функция версии Python, не имеющая ничего общего с html. –

+0

Но html определенно имеет обработку исключений. –

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