如何从龙卷风未来对象获取内容

时间:2016-05-18 00:32:34

标签: python http asynchronous tornado future

我真的对龙卷风框架和未来'感到困惑。宾语。 所以我希望通过进行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 ..我如何从未来获得内容..?

谢谢!

1 个答案:

答案 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)