From eb2b1a0ad7dd5df40423354a2fe34a155f1f87fd Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 16 Mar 2026 12:42:15 +0100 Subject: [PATCH 1/2] increase the limit --- GUI/logic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GUI/logic.py b/GUI/logic.py index 53ae2c4..1c8a8c2 100644 --- a/GUI/logic.py +++ b/GUI/logic.py @@ -135,7 +135,7 @@ def run_subprocess(): total_rows = len(rows) # Кількість фото за один запуск (безпечно для 16GB RAM) - chunk_size = 500 + chunk_size = 1000 total_chunks = math.ceil(total_rows / chunk_size) # 2. Перебираємо і запускаємо пакети по черзі From 4a10349992a698b6e427fb0cc85f6b6e019e3742 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 16 Mar 2026 12:48:36 +0100 Subject: [PATCH 2/2] remove batch processing --- GUI/logic.py | 52 ++++++++++------------------------------------------ 1 file changed, 10 insertions(+), 42 deletions(-) diff --git a/GUI/logic.py b/GUI/logic.py index 1c8a8c2..d90c424 100644 --- a/GUI/logic.py +++ b/GUI/logic.py @@ -13,7 +13,6 @@ path_exporting = "" - def get_base_dir(): """Визначає реальну папку, навіть якщо це скомпільований .exe""" if getattr(sys, 'frozen', False): @@ -127,48 +126,17 @@ def run_subprocess(): "creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {} try: - # 1. Читаємо оригінальний великий CSV файл - with open(path_csv, 'r', encoding='utf-8') as f: - reader = csv.reader(f) - header = next(reader) - rows = list(reader) - - total_rows = len(rows) - # Кількість фото за один запуск (безпечно для 16GB RAM) - chunk_size = 1000 - total_chunks = math.ceil(total_rows / chunk_size) - - # 2. Перебираємо і запускаємо пакети по черзі - for i in range(total_chunks): - chunk_rows = rows[i * chunk_size: (i + 1) * chunk_size] - - # Створюємо шлях до тимчасового файлу в тій самій папці - temp_csv = os.path.join(base_dir, f"temp_chunk_{i}.csv") - - with open(temp_csv, 'w', encoding='utf-8', newline='') as f: - writer = csv.writer(f) - writer.writerow(header) - writer.writerows(chunk_rows) - - # 3. Викликаємо C# ядро, передаючи йому ТИМЧАСОВИЙ файл замість основного! - result = subprocess.run( - [exe_path, temp_csv, path_config, path_template, path_exporting], - capture_output=True, text=True, **kwargs - ) - - # Одразу видаляємо шматок CSV, він нам більше не потрібен - if os.path.exists(temp_csv): - os.remove(temp_csv) - - # Якщо C# крашнувся на якомусь із пакетів - зупиняємо все і показуємо помилку - if result.returncode != 0: - messagebox.showerror(f"Error in batch file { - i+1}/{total_chunks}", result.stdout or result.stderr) - return - + result = subprocess.run( + [exe_path, path_csv, path_config, path_template, path_exporting], + capture_output=True, text=True, **kwargs + ) # 4. Якщо весь цикл пройшов без помилок - messagebox.showinfo("Success!", f"All { - total_rows} baners successfuly generated with batch files \n") + if result.returncode != 0: + messagebox.showerror( + "Error", f"Generator failed:\n{result.stderr}") + else: + messagebox.showinfo( + "Success!", "All baners successfuly generated with batch files \n") except Exception as e: messagebox.showerror("Critical Error", str(e))