Торнадо: сделать блокировку HTTP-запроса в Async Handler - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь написать приложение в Tornado, которое после получения запроса POST, содержащего категорию, будет вызывать функцию, которая будет выполнять (блокировать) HTTP-запросы к списку RSS-каналов (хранится в базе данных CouchDB) с в этой теме, затем выполните некоторую сортировку данных, возвращая словарь в обработчик асинхронных запросов Tornado. Пока что, кажется, он работает относительно хорошо при первом обращении к нему пользователя.

Во втором POST-запросе к той же странице он часто объединяет результаты, полученные из более чем одной категории, как если бы вызовы функций для каждой категории по какой-то причине объединялись. Я новичок в программировании на основе событий и понятия не имею, почему это происходит. Это становится беспорядком, так как пользователь нажимает на одну категорию и получает результаты для обеих.

Вот немного схемы структуры:

Calls:  Tornado Async Handler -> get_data(category) -> RSS_handler(RSS_feed)
Returns: self.write(data)     <- more_data          <- some_data

Есть идеи, почему эти звонки объединяются? Мой класс обработчика RSS очищает все переменные-члены в его функции init , как и функция get_data, которая выполняет обработку.

(включил бы код, но его слишком много, чтобы его можно было вставить здесь, и я понятия не имею, какая строка вызывает его)

1 Ответ

1 голос
/ 28 июня 2011

без подробностей сложно ответить. Это звучит как проблема с использованием глобальных переменных или что-то в этом роде. Хороший способ помочь отладить проблему такого типа - добавить операторы журналирования до и после изменения данных на каждом этапе.

запустите приложение tornado с --logging=debug в командной строке, чтобы включить ведение журнала уровня DEBUG. Затем добавьте операторы регистрации, чтобы помочь отследить, куда добавляются дополнительные данные.

import logging
...
def on_response(self, response):
    logging.debug(response)
    self.write(response.body)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...