Как получить строку из асинхронной функции при помощи return

Пытаюсь разобраться в асинхронности, вся функция работает, но выводит

({<Task finished name='Task-3' coro=<call_url() done, defined at Путь до папки\test.py:7> result='[email protected]'>, <Task finished name='Task-2' coro=<call_url() done, defined at Путь до папки\test.py:7> result='[email protected]'>}, set()

Как сделать более чистый вывод и получить только результуат? Сразу скажу, что похожий вопрос мне не помог.

import asyncio
import aiohttp
from bs4 import BeautifulSoup

urls = ['https://e-ecolog.ru/entity/2360009926','https://e-ecolog.ru/entity/2360009926']

async def call_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:

            data = await response.text()
            soup = BeautifulSoup(data, 'html.parser')
            mail = soup.find(itemprop="email")


    return mail.string

futures = [call_url(url) for url in urls]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(futures))


Ответы (1 шт):

Автор решения: CrazyElf

Вроде так можно результаты получить:

results = [task.result() for task in futures]

Только наверное wait нужно на gather поменять, чтобы сделать ожидание всем задачам. Только звёздочку не забудьте тут:

loop.run_until_complete(asyncio.gather(*futures))

И вызовы тоже поменять, спасибо andreymal:

futures = [loop.create_task(call_url(url)) for url in urls]

Ну, я пока в asyncio и сам ещё не совсем разбираюсь.

→ Ссылка