@@ -32,8 +32,6 @@ def __init__(self, args) -> None:
32
32
self ._records = dict ()
33
33
self ._md5_to_record = dict ()
34
34
self .capacity = max (1 , args .cache_capacity )
35
- self .reserved = max (0 , int (self .capacity * args .cache_reserved_ratio ))
36
- self .reserved = min (self .reserved , self .capacity - 1 )
37
35
self .occupied = 0
38
36
self .expired_secs = 60 * 60
39
37
self .lock = threading .Lock ()
@@ -69,9 +67,9 @@ def _check_and_set_new_id_range(self, alloced_token_num):
69
67
time .sleep (3 )
70
68
return
71
69
72
- def _clear (self ):
70
+ def _clear (self , free_max_count : int ):
73
71
deleted = 0
74
- max_delete = max ( 1 , self . occupied - self . reserved )
72
+ max_delete = free_max_count
75
73
items = sorted (self ._records .items (), key = lambda x : x [1 ].visittime )
76
74
t = time .time ()
77
75
for id , record in items :
@@ -91,10 +89,10 @@ def alloc(self, md5sum_list: list[str], token_num_list: list[int]) -> Optional[l
91
89
now = time .time ()
92
90
with self .lock :
93
91
new_md5s = [m for m in md5sum_list if m not in self ._md5_to_record ]
94
- new_needed = len (new_md5s )
92
+ new_needed = len (set ( new_md5s ) )
95
93
96
94
if self .occupied + new_needed > self .capacity :
97
- self ._clear ()
95
+ self ._clear (free_max_count = new_needed - ( self . capacity - self . occupied ) )
98
96
if self .occupied + new_needed > self .capacity :
99
97
return None
100
98
@@ -127,19 +125,19 @@ def alloc(self, md5sum_list: list[str], token_num_list: list[int]) -> Optional[l
127
125
128
126
def release (self , ids : list [int ]) -> None :
129
127
with self .lock :
130
- for id in ids :
131
- self ._records [id ].ref -= 1
128
+ for id_ in ids :
129
+ self ._records [id_ ].ref -= 1
132
130
133
131
def set_items_data (self , ids : list [int ]) -> None :
134
- for id in ids :
135
- self ._records [id ].data = True
132
+ for id_ in ids :
133
+ self ._records [id_ ].data = True
136
134
137
135
def get_items_data (self , ids : list [int ]) -> list [Optional [bool ]]:
138
- return [self ._records .get (i ).data if i in self ._records else False for i in ids ]
136
+ return [self ._records .get (id_ ).data if id_ in self ._records else False for id_ in ids ]
139
137
140
138
def set_items_embed (self , ids : list [int ]) -> None :
141
- for id in ids :
142
- self ._records [id ].embed = True
139
+ for id_ in ids :
140
+ self ._records [id_ ].embed = True
143
141
144
142
def get_items_embed (self , ids : list [int ]) -> list [Optional [bool ]]:
145
- return [self ._records .get (i ).embed if i in self ._records else False for i in ids ]
143
+ return [self ._records .get (id_ ).embed if id_ in self ._records else False for id_ in ids ]
0 commit comments