Speed up fetching statistics by using attrgetter

Uses the faster native code vs a lambda
4aeae28671/Modules/_operator.c (L1406)
This commit is contained in:
J. Nick Koston
2023-02-15 22:17:31 -06:00
parent 57cea6d637
commit 1080073059

View File

@@ -10,6 +10,7 @@ from functools import lru_cache, partial
from itertools import chain, groupby from itertools import chain, groupby
import json import json
import logging import logging
from operator import attrgetter
import os import os
import re import re
from statistics import mean from statistics import mean
@@ -2020,10 +2021,8 @@ def _sorted_statistics_to_dict(
# Identify metadata IDs for which no data was available at the requested start time # Identify metadata IDs for which no data was available at the requested start time
stats_by_meta_id: dict[int, list[Row]] = {} stats_by_meta_id: dict[int, list[Row]] = {}
seen_statistic_ids: set[str] = set() seen_statistic_ids: set[str] = set()
for meta_id, group in groupby( key_func = attrgetter("metadata_id")
stats, for meta_id, group in groupby(stats, key_func):
lambda stat: stat.metadata_id, # type: ignore[no-any-return]
):
stats_list = stats_by_meta_id[meta_id] = list(group) stats_list = stats_by_meta_id[meta_id] = list(group)
seen_statistic_ids.add(metadata[meta_id]["statistic_id"]) seen_statistic_ids.add(metadata[meta_id]["statistic_id"])
first_start_time_ts = stats_list[0].start_ts first_start_time_ts = stats_list[0].start_ts