From 2796a58eadfcf7e23e6df4d48e080c18e4d33da6 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 28 Mar 2021 20:58:48 -1000 Subject: [PATCH] Speed up bond setup with gather (#48454) --- homeassistant/components/bond/utils.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/bond/utils.py b/homeassistant/components/bond/utils.py index e3d951b8137..916da69a06c 100644 --- a/homeassistant/components/bond/utils.py +++ b/homeassistant/components/bond/utils.py @@ -1,15 +1,18 @@ """Reusable utilities for the Bond component.""" from __future__ import annotations -import asyncio import logging from typing import Any, cast from aiohttp import ClientResponseError from bond_api import Action, Bond +from homeassistant.util.async_ import gather_with_concurrency + from .const import BRIDGE_MAKE +MAX_REQUESTS = 6 + _LOGGER = logging.getLogger(__name__) @@ -114,15 +117,25 @@ class BondHub: # Fetch all available devices using Bond API. device_ids = await self.bond.devices() self._devices = [] + setup_device_ids = [] + tasks = [] for idx, device_id in enumerate(device_ids): if max_devices is not None and idx >= max_devices: break - - device, props = await asyncio.gather( - self.bond.device(device_id), self.bond.device_properties(device_id) + setup_device_ids.append(device_id) + tasks.extend( + [self.bond.device(device_id), self.bond.device_properties(device_id)] ) - self._devices.append(BondDevice(device_id, device, props)) + responses = await gather_with_concurrency(MAX_REQUESTS, *tasks) + response_idx = 0 + for device_id in setup_device_ids: + self._devices.append( + BondDevice( + device_id, responses[response_idx], responses[response_idx + 1] + ) + ) + response_idx += 2 _LOGGER.debug("Discovered Bond devices: %s", self._devices) try: