Skip to content

Commit 9bc3a6a

Browse files
authored
Merge pull request #1968 from giulio-leone/fix/iterator-deque-performance
perf: use deque for iterator object cache
2 parents beda286 + c9cb0ca commit 9bc3a6a

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

weaviate/collections/iterator.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import deque
12
from dataclasses import dataclass
23
from typing import (
34
Any,
@@ -6,7 +7,6 @@
67
Generic,
78
Iterable,
89
Iterator,
9-
List,
1010
Optional,
1111
)
1212
from uuid import UUID
@@ -54,14 +54,14 @@ def __init__(
5454
self.__query = query
5555
self.__inputs = inputs
5656

57-
self.__iter_object_cache: List[Object[TProperties, TReferences]] = []
57+
self.__iter_object_cache: deque[Object[TProperties, TReferences]] = deque()
5858
self.__iter_object_last_uuid: Optional[UUID] = _parse_after(self.__inputs.after)
5959
self.__iter_cache_size = cache_size or ITERATOR_CACHE_SIZE
6060

6161
def __iter__(
6262
self,
6363
) -> Iterator[Object[TProperties, TReferences]]:
64-
self.__iter_object_cache = []
64+
self.__iter_object_cache = deque()
6565
self.__iter_object_last_uuid = _parse_after(self.__inputs.after)
6666
return self
6767

@@ -75,11 +75,11 @@ def __next__(self) -> Object[TProperties, TReferences]:
7575
return_properties=self.__inputs.return_properties,
7676
return_references=self.__inputs.return_references,
7777
)
78-
self.__iter_object_cache = res.objects # type: ignore
78+
self.__iter_object_cache = deque(res.objects) # type: ignore
7979
if len(self.__iter_object_cache) == 0:
8080
raise StopIteration
8181

82-
ret_object = self.__iter_object_cache.pop(0)
82+
ret_object = self.__iter_object_cache.popleft()
8383
self.__iter_object_last_uuid = ret_object.uuid
8484
assert (
8585
self.__iter_object_last_uuid is not None
@@ -100,14 +100,14 @@ def __init__(
100100
self.__query = query
101101
self.__inputs = inputs
102102

103-
self.__iter_object_cache: List[Object[TProperties, TReferences]] = []
103+
self.__iter_object_cache: deque[Object[TProperties, TReferences]] = deque()
104104
self.__iter_object_last_uuid: Optional[UUID] = _parse_after(self.__inputs.after)
105105
self.__iter_cache_size = cache_size or ITERATOR_CACHE_SIZE
106106

107107
def __aiter__(
108108
self,
109109
) -> AsyncIterator[Object[TProperties, TReferences]]:
110-
self.__iter_object_cache = []
110+
self.__iter_object_cache = deque()
111111
self.__iter_object_last_uuid = _parse_after(self.__inputs.after)
112112
return self
113113

@@ -123,11 +123,11 @@ async def __anext__(
123123
return_properties=self.__inputs.return_properties,
124124
return_references=self.__inputs.return_references,
125125
)
126-
self.__iter_object_cache = res.objects # type: ignore
126+
self.__iter_object_cache = deque(res.objects) # type: ignore
127127
if len(self.__iter_object_cache) == 0:
128128
raise StopAsyncIteration
129129

130-
ret_object = self.__iter_object_cache.pop(0)
130+
ret_object = self.__iter_object_cache.popleft()
131131
self.__iter_object_last_uuid = ret_object.uuid
132132
assert (
133133
self.__iter_object_last_uuid is not None

0 commit comments

Comments
 (0)