首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环使用AsyncHTTPClient (旋风,Python)

循环使用AsyncHTTPClient (旋风,Python)
EN

Stack Overflow用户
提问于 2013-08-05 20:15:13
回答 1查看 633关注 0票数 1

我试图在“旋风”中使用AsyncHTTPClient对一个在http上可用的“设备”做多个标注:

代码语言:javascript
复制
def ext_call(self, params):
    device = AsyncHTTPClient()
    request = HTTPRequest(...)
    return partial(device.fetch, request)

@coroutine
def _do_call(self, someid):
    acall = self.ext_call(params)
    waitkey = str(someid)
    acall(callback = (yield Callback(waitkey)))
    response = yield Wait(waitkey)
    raise Return(response)

def get_device_data(self, lst):
    for someid in lst:
        r = self._do_call(someid)
        print 'response', r

但是,与AsyncHTTPClient应该在.fetch之后返回的HTTP不同,我得到了以下内容:

代码语言:javascript
复制
response <tornado.concurrent.TracebackFuture object at 0x951840c>

为什么这不像http://www.tornadoweb.org/en/stable/gen.html中的示例那样工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-06 09:33:29

解决了这个问题。看来@coroutine必须从继承RequestHandler的类get/post方法中一直应用,否则@coroutine/产生魔力就无效。

显然,这是“旋风”的新鲜感与我这方面糟糕的设计相结合的情况:据一位同事说,不应该做嵌套@coroutine和but ()s的“回调意大利面”,而应该将所有同步代码移出请求处理程序,并在异步代码之前或之后调用它,并让@coroutine调用层次结构平缓而不是深。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18066908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档