8000 Improve ResultSet.items() performance · yingcloud/influxdb-python@7970701 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7970701

Browse files
committed
Improve ResultSet.items() performance
Use straightforward method of getting points for a serie: no need to try to filter by measurement/tag: it greatly decreases performance.
1 parent 1da39bf commit 7970701

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

influxdb/resultset.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,22 @@ def get_points(self, measurement=None, tags=None):
8888

8989
for serie in self._get_series():
9090
serie_name = serie.get('measurement', serie.get('name', 'results'))
91+
print serie_name
9192
if serie_name is None:
9293
# this is a "system" query or a query which
9394
# doesn't return a name attribute.
9495
# like 'show retention policies' ..
9596
if tags is None:
96-
for point in serie['values']:
97-
yield self.point_from_cols_vals(
98-
serie['columns'],
99-
point
100-
)
97+
for item in self._get_points_for_serie(serie):
98+
yield item
10199

102100
elif measurement in (None, serie_name):
103101
# by default if no tags was provided then
104102
# we will matches every returned serie
105103
serie_tags = serie.get('tags', {})
106104
if tags is None or self._tag_matches(serie_tags, tags):
107-
for point in serie.get('values', []):
108-
yield self.point_from_cols_vals(
109-
serie['columns'],
110-
point
111-
)
105+
for item in self._get_points_for_serie(serie):
106+
yield item
112107

113108
def __repr__(self):
114109
items = []
@@ -166,10 +161,22 @@ def items(self):
166161
serie.get('name', 'results')),
167162
serie.get('tags', None))
168163
items.append(
169-
(serie_key, self[serie_key])
164+
(serie_key, self._get_points_for_serie(serie))
170165
)
171166
return items
172167

168+
def _get_points_for_serie(self, serie):
169+
""" Return generator of dict from columns and values of a serie
170+
171+
:param serie: One serie
172+
:return: Generator of dicts
173+
"""
174+
for point in serie.get('values', []):
175+
yield self.point_from_cols_vals(
176+
serie['columns'],
177+
point
178+
)
179+
173180
@staticmethod
174181
def point_from_cols_vals(cols, vals):
175182
""" Creates a dict from columns and values lists

0 commit comments

Comments
 (0)
0