Поскольку Python 3.5 представил async with
синтаксис, рекомендованный в документах для aiohttp
изменился. Теперь, чтобы получить один URL-адрес, они предлагают:
import aiohttp
import asyncio
async def fetch(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
return await response.text()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
with aiohttp.ClientSession(loop=loop) as session:
html = loop.run_until_complete(
fetch(session, 'http://python.org'))
print(html)
Как я могу изменить это, чтобы получить набор URL-адресов вместо одного URL-адреса?
В старых asyncio
примерах вы бы создали список задач, таких как
tasks = [
fetch(session, 'http://cnn.com'),
fetch(session, 'http://google.com'),
fetch(session, 'http://twitter.com')
]
Я попытался объединить такой список с описанным выше подходом, но не смог.
results = loop.run_until_complete(tasks)
, я получаю ошибку времени выполнения.async with
— это настолько новая функция, о которой так мало литературы, что для людей, изучающих ее, было бы очень удобно, если бы в документеaiohttp
был показан пример захвата более одного URL-адреса. Библиотека выглядит потрясающе, просто нужно немного подержать руку, чтобы начать. Благодарю вас! - person Hans Schindler   schedule 09.03.2016