Остановка долгосрочных запросов в Pylons - PullRequest
1 голос
/ 25 апреля 2010

Я работаю над приложением, использующим Pylons, и мне было интересно, есть ли способ убедиться, что он не тратит слишком много времени на обработку одного запроса. То есть я хотел бы найти способ поставить таймер на каждый запрос, чтобы по истечении слишком большого времени запрос просто останавливался (и, возможно, возвращал какую-то ошибку).

Предполагается, что приложение позволяет пользователям выполнять некоторые сложные вычисления, но я хотел бы убедиться в том, что если расчет начинает занимать слишком много времени, мы прекращаем его, чтобы позволить другим вычислениям.

1 Ответ

3 голосов
/ 25 апреля 2010

Вместо того, чтобы завершить запрос с ошибкой, лучшим подходом может быть выполнение длительных вычислений в отдельном потоке (или потоках) или процессе (или процессах):

  1. Когда запрос на вычисление получен, он добавляется в очередь и идентифицируется уникальным идентификатором. Вы перенаправляете на страницу результатов, ссылающуюся на уникальный идентификатор, который может содержать сообщение «Пожалуйста, подождите, вычисление» и кнопку обновления (или автообновление через метатег).
  2. Поток или процесс, который выполняет вычисления, извлекает запросы из очереди, обновляет конечный результат (и, возможно, информацию о ходе выполнения), который обработчик страницы результатов будет предоставлять пользователю при обновлении.
  3. Когда вычисление будет завершено, возвращенная страница обновления не будет иметь кнопки обновления или тега обновления, а просто покажет окончательный результат.
...