首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在旋风和Flask中运行@gen.coroutine synchronous

在旋风和Flask中运行@gen.coroutine synchronous
EN

Stack Overflow用户
提问于 2015-08-21 19:53:10
回答 1查看 307关注 0票数 0

我在Tornado中遇到了异步连接的问题。我想让代理通过访问Flask端点(/async/...)来获取页面正文。然后,它应该异步地获取该页面的内容。但是我该怎么做呢?这里有一个我已经写好的代码片段。它可以很好地打印response.body,但我如何在proxyAsync中返回它以在网页上显示它?

代码语言:javascript
复制
@gen.coroutine
def fetch_coroutine(url):
    http_client = AsyncHTTPClient()
    response = yield http_client.fetch(url)
    print('------------------')
    print(response.body)
    print('------------------')
    raise gen.Return(response.body)

@proxy_service.route('/async/<path:url>', methods=methodsHTTP)
def proxyAsync(url):
    # Send request
    response = fetch_coroutine(url)

    return jsonify({})
EN

回答 1

Stack Overflow用户

发布于 2015-08-21 20:25:13

@gen.coroutine返回一个gen.Future实例。这需要处理。否则,tornado http_client获取将不会由任何东西完成。

您应该能够通过执行以下操作来使此代码片段工作:

代码语言:javascript
复制
from tornado.ioloop import IOLoop
def proxyAsync(url):
    response = IOLoop.current().run_sync(fetch_coroutine(url))
    # I presume you wanted to return the response.
    return jsonify(response)

不管怎样,你不会从异步http_fetch中获得任何好处,因为你的应用是基于Flask的。

你想使用Flask和Tornado有什么特别的原因吗?Tornado的web框架非常容易使用,这样您的异步http_fetch就可以很好地与主应用程序的IOLoop保持一致。

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

https://stackoverflow.com/questions/32139646

复制
相关文章

相似问题

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