Мне нужно асинхронно сделать несколько HTTP-вызовов внутри обработчика запросов торнадо.
попытка вернуть фьючерсы плохо документирована и практически невозможна на собранном asyncio.gather на уровне обработчика торнадо.
Я пробовал aiohttp, который отлично работает сам по себе, однако, помещая его в обработчик торнадо, он вызывает цикл, который уже используется. Если вы можете показать мне, как ввести в IOLoop несколько новых вариантов будущего решения, это было бы неплохо.
Я также пробовал использовать tornados AsyncHTTPClient
, который вопреки документации фактически не использует yield, но возвращает ответ, когда вы используете await.
Есть ли по этому поводу свежая документация? ВСЕ пример не работает для нескольких асинхронных запросов.
согласно этой документации http://www.tornadoweb.org/en/stable/gen.html#module-tornado.gen
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response1, response2 = yield [http_client.fetch(url1),
http_client.fetch(url2)]
response_dict = yield dict(response3=http_client.fetch(url3),
response4=http_client.fetch(url4))
response3 = response_dict['response3']
response4 = response_dict['response4']
однако при попытке сделать это сам yield выдает ошибку, и замена этого на await дает результат. однако вы не можете ждать объекта dict, например yield. Как я могу это обойти?
Python 3.6.7 Торнадо 5.1.1 Aiohttp 3.5.4
await
их вместо уступки или чрезмерно усложненного WaitIterator, как это пытаются вам сказать плохо сделанные документы торнадо. - person Erik K   schedule 01.02.2019WaitIterator
по-прежнему выдает ошибку"AssertionError: yield from wasn't used with future\n"
Есть что-то, что изначально нарушено во взаимодействии tornados со сломанным asyncio - person Erik K   schedule 01.02.2019WaitIterator
позволяет получать / ожидать фьючерсы асинхронно, что означает, что он дает вам результат будущего по мере их разрешения. Если вы просто уступите / ожидаете список фьючерсов, вы не получите результат, когда фьючерс разрешится. Вы получите результат только тогда, когда будут разрешены все фьючерсы. - person xyres   schedule 01.02.2019