asyncio + aiohttp, 2 разных кода, но скорость выполнения разнится в разы, хотя описаны одинаково

Есть 2 ассинхронных кода, один выполняется очень быстро, второй достаточно медленно, при одинаковом количестве запросов, в чем может быть проблема и как можно решить эту проблему? в коде отмечены промежутки за который выполняется код.

это медленный вариант

async def request(url, params=None):
    async with aiohttp.ClientSession(headers=headers) as session:
        async with session.get(url, params=params) as response:
            return await response.json()


async def get_entity(session, url, params=None):
    async with session.get(url, params=params) as response:
        return await response.json()


async def parse_all():
    start = time.time()
    result = (
        await request(url + 'api/v1/companies/', params={"limit": 50})
    )['_embedded']['companies']
    task_list = []
    print(time.time() - start)  # 0.4720320701599121
    async with aiohttp.ClientSession(headers=headers) as session:
        for company in result:
            for page_count in range(1, len(company['_embedded']['leads']) // 250 + 2):
                task_list.append(
                    get_entity(
                        session,
                        url + 'api/v1/leads/',
                        {'page': page_count, 'company': company['id']}
                    )
                )
            for page_count in range(1, len(company['_embedded']['contacts']) // 250 + 2):
                task_list.append(
                    get_entity(
                        session,
                        url + 'api/v1/contacts/',
                        {'page': page_count, 'company': company['id']}
                    )
                )
        print(time.time() - start)  # 0.4190201759338379
        return await asyncio.gather(*task_list)


if __name__ == '__main__':
    start = time.time()
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(parse_all())
    print(time.time() - start)  # 15.692176580429077

А вот собственно быстрый. В чем разница?

async def request(session, url):
    async with session.get(url) as response:
        return await response.json()


async def parse():
    start = time.time()
    task = []
    async with aiohttp.ClientSession() as session:
        for i in range(1, 101):
            task.append(
                request(
                    session, f'https://jsonplaceholder.typicode.com/posts/{i}')
            )
        print(time.time() - start)
        return await asyncio.gather(*task)


if __name__ == '__main__':
    start = time.time()
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(parse())
    print(time.time() - start) # 0.44432830810546875

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