我真的对龙卷风框架和未来'感到困惑。宾语。 所以我希望通过进行http调用来获得异步响应 代码是:
class TestAsyncHttp(object):
def __init__(self):
self._http_client = httpclient.AsyncHTTPClient()
@gen.coroutine
def get_response(self, params)
response = yield self._request(
method='POST',
endpoint='test'
data=params
)
raise gen.Return(response)
@gen.coroutine
def _request(self, method, endpoint, data):
url = self._make_url(endpoint) #this includes the port..
headers = self._load_headers()
request = httpclient.HTTPRequest(
url,
method=method,
headers=header,
body=json.dump(data)
)
response = yield self._http_client.fetch(request)
raise gen.Return(response)
问题是,在我完成这个之后,我该如何测试呢?
我试着写一个包含......的脚本:
import json
with open('test/request.json') as json_file:
request_json = json.loads(json_file.read())
def get_response():
x = TestAsyncHttp()
ret = yield x.get_response(request_json)
body = ret.body
print body['value']
get_response
但接下来我就是#python"路径到脚本"' 没有任何输出。 如果我刚刚进入" python"环境,我得到了未来"对象没有 getitem ..我如何从未来获得内容..?
谢谢!
答案 0 :(得分:0)
使用run_sync
以同步方式运行异步协程:
def get_response():
x = TestAsyncHttp()
ret = IOLoop.current().run_sync(lambda: x.get_response(request_json))
body = ret.body
print body['value']
此处需要lambda
只是为了传递request_json
参数。如果get_response
没有参数,你可以改为:
ret = IOLoop.current().run_sync(x.get_response)