Inkonsistenz des Cache -Zustands: Thread geht falsch davon aus, dass der Cache voll istPython

Python-Programme
Anonymous
 Inkonsistenz des Cache -Zustands: Thread geht falsch davon aus, dass der Cache voll ist

Post by Anonymous »

Ich arbeite mit einer Klasse namens CachedrandomiterDataset, die einen asynchronen Thread verwendet, um Daten aus einem Datensatz in einen Cache zu laden. Der Cache soll mit Daten gefüllt, gemischt und dann übertrieben sein. Vielen Dank im Voraus für jede Hilfe! Der Cache und der Iterator finden beim Versuch, Daten erneut zu popieren def _load_data(self):
"""Asynchronous function to load data into cache."""
while not self.stop_thread:
self.lock.acquire()
if len(self.cache) < self.cache_size // 2:
try:
cnt_iter = range(self.cache_size - len(self.cache))
if self.show_bar:
cnt_iter = tqdm.tqdm(cnt_iter, desc="Buffering...")
for _ in cnt_iter:
self.cache.append(next(self.iterator))
print(time.ctime(), "load", self.cache_size, len(self.cache), id(self.cache))
random.shuffle(self.cache)
except StopIteration:
# print("stop")
self.stop_thread = True
else:
print(time.ctime(), "load full", self.cache_size, len(self.cache), id(self.cache))
pass
self.lock.release()
time.sleep(1)

def __iter__(self) -> torchio.Subject:
while True:
self.lock.acquire()
print(time.ctime(), "iter", self.cache_size, len(self.cache), id(self.cache))
if self.cache:
# If cache is not empty, yield item
item = self.cache.pop()
print("111")
yield item
else:
print(time.ctime(), "cache empty", self.cache_size, len(self.cache), id(self.cache))
# Wait for data to be loaded into cache
if self.stop_thread:
break
time.sleep(1)
self.lock.release()
< /code>

Wie kann ich das Problem beheben, bei dem der Thread fälschlicherweise davon ausgeht, dass der Cache voll ist?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post