Skip to content

Commit 71673ba

Browse files
committed
fix: handle key not existing
1 parent 2b6f1b0 commit 71673ba

File tree

4 files changed

+14
-13
lines changed

4 files changed

+14
-13
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "shared-lru-cache"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
description = ""
55
authors = ["Richard Löwenström <[email protected]>"]
66
readme = "README.md"

shared_lru_cache/shared_lru_cache.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,29 @@ def wrapper(*args, **kwargs):
2121
with self.read_lock:
2222
if key in self.cache:
2323
with self.write_lock:
24-
self.order.remove(key)
24+
if (
25+
key in self.order
26+
): # Check if key is in order before removing
27+
self.order.remove(key)
2528
self.order.append(key)
2629
return pickle.loads(self.data_store[key])
2730

2831
result = func(*args, **kwargs)
29-
30-
# Serialize the result
3132
serialized_result = pickle.dumps(result)
3233

3334
with self.write_lock:
3435
# Check again in case another process has updated the cache
3536
if key in self.cache:
36-
self.order.remove(key)
37-
self.order.append(key)
38-
return pickle.loads(self.data_store[key])
37+
return result
3938

4039
self.cache[key] = key
4140
self.data_store[key] = serialized_result
4241
self.order.append(key)
4342

44-
if len(self.order) > self.maxsize:
43+
while len(self.order) > self.maxsize:
4544
oldest = self.order.pop(0)
46-
del self.cache[oldest]
47-
del self.data_store[oldest]
45+
self.cache.pop(oldest, None)
46+
self.data_store.pop(oldest, None)
4847

4948
return result
5049

tests/test_pytorch_data_loader.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
from shared_lru_cache import shared_lru_cache
99

10+
MAX_INDEX = 20
11+
1012

1113
def load_image(idx):
1214
time.sleep(0.2) # Simulate some data loading time
@@ -25,7 +27,7 @@ def __len__(self):
2527
return self.size
2628

2729
def __getitem__(self, idx):
28-
return lru_cached_load_image(idx % 50)
30+
return lru_cached_load_image(idx % MAX_INDEX)
2931

3032

3133
class SharedLRUCachedDataset(Dataset):
@@ -36,7 +38,7 @@ def __len__(self):
3638
return self.size
3739

3840
def __getitem__(self, idx):
39-
return shared_lru_cached_load_image(idx % 50)
41+
return shared_lru_cached_load_image(idx % MAX_INDEX)
4042

4143

4244
def test_shared_lru_cache_vs_standard_dataloader():

tests/test_shared_lru_cache.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def test_shared_lru_cache_vs_functools_lru_cache():
159159
# Assert that the performance difference is within an acceptable range
160160
# This is a flexible assertion as performance can vary between runs
161161
assert (
162-
abs(shared_time - functools_time) < 0.1
162+
abs(shared_time - functools_time) < 0.2
163163
), "Performance difference is too large"
164164

165165

0 commit comments

Comments
 (0)