diff --git a/src/heurams/interface/screens/precache.py b/src/heurams/interface/screens/precache.py index 5dabe6d..db69f62 100644 --- a/src/heurams/interface/screens/precache.py +++ b/src/heurams/interface/screens/precache.py @@ -46,6 +46,7 @@ class PrecachingScreen(Screen): for i in nucleons: i: pt.Nucleon i.do_eval() + #print("完成 EVAL") def compose(self) -> ComposeResult: yield Header(show_clock=True) @@ -107,17 +108,21 @@ class PrecachingScreen(Screen): def precache_by_nucleon(self, nucleon: pt.Nucleon): """依据 Nucleon 缓存""" - return self.precache_by_text(nucleon.metadata['formation']['tts_text']) + #print(nucleon.metadata['formation']['tts_text']) + ret = self.precache_by_text(nucleon.metadata['formation']['tts_text']) + return ret #print(f"TTS 缓存: {nucleon.metadata['formation']['tts_text']}") def precache_by_list(self, nucleons: list): """依据 Nucleons 列表缓存""" for idx, nucleon in enumerate(nucleons): + print(f"PROC: {nucleon}") worker = get_current_worker() if worker and worker.is_cancelled: # 函数在worker中执行且已被取消 return False text = nucleon.metadata['formation']['tts_text'] - self.current_item = text[:30] + "..." if len(text) > 50 else text + #self.current_item = text[:30] + "..." if len(text) > 50 else text + print(text) self.processed += 1 progress = int((self.processed / self.total) * 100) if self.total > 0 else 0 self.update_status( @@ -131,14 +136,20 @@ class PrecachingScreen(Screen): ) import time time.sleep(1) - return True + return True def precache_by_nucleons(self): - return self.precache_by_list(self.nucleons) + #print("开始缓存") + ret = self.precache_by_list(self.nucleons) + #print(f"返回 {ret}") + return ret def precache_by_filepath(self, path: pathlib.Path): """预缓存单个文件的所有内容""" - return self.precache_by_list(pt.load_nucleon(path)[0]) + lst = list() + for i in pt.load_nucleon(path): + lst.append(i[0]) + return self.precache_by_list(lst) def precache_all_files(self): @@ -177,9 +188,9 @@ class PrecachingScreen(Screen): if event.button.id == "start_precache" and not self.is_precaching: # 开始预缓存 if self.nucleons: - self.precache_worker = self.run_worker(self.precache_by_nucleons, thread=True) + self.precache_worker = self.run_worker(self.precache_by_nucleons, thread=True, exclusive=True, exit_on_error=True) else: - self.precache_worker = self.run_worker(self.precache_all_files, thread=True) + self.precache_worker = self.run_worker(self.precache_all_files, thread=True, exclusive=True, exit_on_error=True) elif event.button.id == "cancel_precache" and self.is_precaching: # 取消预缓存 diff --git a/src/heurams/kernel/particles/loader.py b/src/heurams/kernel/particles/loader.py index 7f399f5..8d0619f 100644 --- a/src/heurams/kernel/particles/loader.py +++ b/src/heurams/kernel/particles/loader.py @@ -4,6 +4,7 @@ import heurams.services.hasher as hasher import pathlib import toml import json +from copy import deepcopy def load_nucleon(path: pathlib.Path, fmt = "toml"): with open(path, "r") as f: @@ -28,7 +29,7 @@ def load_nucleon(path: pathlib.Path, fmt = "toml"): for item, attr in nested_data.items(): if item == "__metadata__": continue - lst.append((Nucleon(hasher.hash(item), attr, nested_data['__metadata__']), nested_data["__metadata__"]["orbital"])) + lst.append((Nucleon(hasher.hash(item), attr, deepcopy(nested_data['__metadata__'])), deepcopy(nested_data["__metadata__"]["orbital"]))) return lst def load_electron(path: pathlib.Path, fmt = "json") -> dict: