2016-05-18 29 views
0

我真的被龙卷风框架工作和'未来'物体所困惑。 所以,我想通过进行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 

但后来我“蟒蛇‘路径到的脚本’” 没有什么产出。 如果我刚刚进入“蟒蛇”环境,我得到了“未来”的对象没有getitem ..我如何从未来获得内容..?

谢谢!

回答

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)