From 23780a57c64abd056a216588ffac0634e31d42eb Mon Sep 17 00:00:00 2001 From: david-ajax Date: Tue, 9 Dec 2025 14:10:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=B5=85=E6=8B=B7?= =?UTF-8?q?=E8=B4=9D=E5=AF=BC=E8=87=B4=E7=9A=84=20eval=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/heurams/interface/screens/precache.py | 25 ++++++++++++++++------- src/heurams/kernel/particles/loader.py | 3 ++- 2 files changed, 20 insertions(+), 8 deletions(-) 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: