[英]Python with Tornado: How to get fetch response in async functions?
我正在尝试创建一个Python脚本,该脚本使用fetch运行Tornado Async http客户端,并尝试获取响应并将response.body打印到屏幕上。
我的课程代码是:
class MyAsyncHTTPClient(httpclient.AsyncHTTPClient):
@gen.coroutine
def _fetch(self, url):
print('send Asynchronous request ...['+url+"] ")
http_response = yield gen.Task(self.fetch, url)
print(http_response.body)
print('got Asynchronous response !!'+str(http_response))
raise gen.Return(http_response.body)
我这样称呼它:
async_http_client = MyAsyncHTTPClient()
res_body = async_http_client._fetch(url)
问题是,我不确定如何在准备好返回值后如何处理该代码。 你能帮忙吗? 谢谢!
编辑中
我也尝试过实现此功能,例如:
class MyAsyncHTTPClient(httpclient.AsyncHTTPClient):
@gen.coroutine
def _fetch(self, url):
print('send Asynchronous request ...['+url+"] "+str(self))
http_response = yield self.fetch(url)
print('got Asynchronous response !!')
return http_response.body
但我有相同的结果:(
再次编辑
我已经成功运行了异步类...但是没有继承的对象自身。 我是那样做的:
@gen.coroutine
def _fetch_async(self, url):
print('send Asynchronous request ...[' + url + "] ")
http_response = yield httpclient.AsyncHTTPClient().fetch(url)
#http_response = yield self.fetch(url)
print('got Asynchronous response !!')
return http_response.body
而且效果很好。 问题是我需要使用继承的对象self,并且不确定在定义类时我在这里缺少什么。 调试时,我可以看到self的内容非常“瘦”。请让我知道我在这里做错了什么。
谢谢!
只能从其他异步函数中调用异步函数。 您必须像这样调用_fetch
:
@gen.coroutine
def f():
async_http_client = MyAsyncHTTPClient()
res_body = yield async_http_client._fetch(url)
如果您不是在龙卷风服务器的环境中执行此操作,则从__main__
块调用协程的最佳方法如下:
tornado.ioloop.IOLoop.current().run_sync(f)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.