2016-05-18 2 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 

Но тогда я «питон„путь-к-скрипт“» Там ничего выход. Если я только что ступил в среду «python», у меня «будущий» объект не имеет 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) 
Смежные вопросы