Проблема в return tasks
в конце main()
, которого нет в оригинальной статье. Вместо того, чтобы возвращать объекты сопрограмм (которые бесполезны после передачи в asyncio.gather
), вы должны возвращать кортеж, возвращаемый asyncio.gather
, который содержит результаты запуска сопрограмм в правильном порядке. Например:
async def main(loop, urls):
async with aiohttp.ClientSession(loop=loop) as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
return results
Теперь loop.run_until_complete(main(loop, urls))
вернет кортеж текстов в том же порядке, что и URL.