龙卷风:在异步处理程序中阻止HTTP请求

时间:2011-06-27 21:09:43

标签: python asynchronous tornado

我正在尝试在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 个答案:

答案 0 :(得分:1)

没有更多细节,很难回答。这听起来像使用全局变量或类似的问题。帮助调试此类问题的一种好方法是在每个步骤修改数据之前和之后添加日志记录语句。

在命令行上使用--logging=debug运行您的龙卷风应用程序以启用DEBUG级别日志记录。然后添加日志记录语句以帮助跟踪添加额外数据的位置。

import logging
...
def on_response(self, response):
    logging.debug(response)
    self.write(response.body)