我在Tornado中遇到了异步连接的问题。我想让代理通过访问Flask端点(/async/...)来获取页面正文。然后,它应该异步地获取该页面的内容。但是我该怎么做呢?这里有一个我已经写好的代码片段。它可以很好地打印response.body,但我如何在proxyAsync中返回它以在网页上显示它?
@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({})发布于 2015-08-21 20:25:13
@gen.coroutine返回一个gen.Future实例。这需要处理。否则,tornado http_client获取将不会由任何东西完成。
您应该能够通过执行以下操作来使此代码片段工作:
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保持一致。
https://stackoverflow.com/questions/32139646
复制相似问题