我在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({})
答案 0 :(得分:0)
@ gen.coroutine返回gen.Future实例。这需要处理。否则龙卷风http_client fetch将无法完成。
您应该可以通过执行以下操作来使此代码段工作:
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保持一致。