繁体   English   中英

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

[英]Tornado: Make Blocking HTTP Request in Async Handler

我正在尝试用Tornado编写一个应用程序,该应用程序在收到包含类别的POST请求时,将调用一个函数,该函数将向具有该主题的RSS提要列表(保存在CouchDB数据库中)发出(阻止)HTTP请求,然后对数据进行一些排序,将字典返回给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函数也将其清除。

(本来应该包含代码,但其中太多内容无法真正粘贴到此处,我也不知道是哪行引起的)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM