File tree 1 file changed +20
-1
lines changed
1 file changed +20
-1
lines changed Original file line number Diff line number Diff line change @@ -74,6 +74,7 @@ def sweep(self):
74
74
# O(m)
75
75
now = time .time ()
76
76
c = 0
77
+ values_closed = list () # list is cheaper to create
77
78
while len (self ._last_visits ) > 0 :
78
79
least = self ._last_visits [0 ]
79
80
if now - least <= self .timeout :
@@ -83,7 +84,9 @@ def sweep(self):
83
84
if key in self ._store :
84
85
if now - self ._keys_to_last_time [key ] > self .timeout :
85
86
value = self ._store [key ]
86
- self .close_callback (value )
87
+ if value not in values_closed :
88
+ self .close_callback (value )
89
+ values_closed .append (value )
87
90
for key in self ._time_to_keys [least ]:
88
91
self ._last_visits .popleft ()
89
92
if key in self ._store :
@@ -126,5 +129,21 @@ def test():
126
129
assert 'a' not in c
127
130
assert 'b' not in c
128
131
132
+ global close_cb_called
133
+ close_cb_called = False
134
+
135
+ def close_cb (t ):
136
+ global close_cb_called
137
+ assert not close_cb_called
138
+ close_cb_called = True
139
+
140
+ c = LRUCache (timeout = 0.1 , close_callback = close_cb )
141
+ c ['s' ] = 1
142
+ c ['s' ]
143
+ time .sleep (0.1 )
144
+ c ['s' ]
145
+ time .sleep (0.3 )
146
+ c .sweep ()
147
+
129
148
if __name__ == '__main__' :
130
149
test ()
You can’t perform that action at this time.
0 commit comments