From 70bf4b666ed76ba3d55b67ea5eadaab939d617db Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 20:13:18 +0000 Subject: [PATCH] Keep engine alive between moves, quit only on game over or neutral mode Agent-Logs-Url: https://github.com/fsmosca/Python-Easy-Chess-GUI/sessions/1825c5bc-472f-4fcf-95c4-323effd52f19 Co-authored-by: fsmosca <22366935+fsmosca@users.noreply.github.com> --- .../python_easy_chess_gui.cpython-312.pyc | Bin 0 -> 138009 bytes python_easy_chess_gui.py | 94 ++++++++++++------ 2 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 __pycache__/python_easy_chess_gui.cpython-312.pyc diff --git a/__pycache__/python_easy_chess_gui.cpython-312.pyc b/__pycache__/python_easy_chess_gui.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bdb929d6f586dbc74b284a9e81bd7ae01075904 GIT binary patch literal 138009 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 z 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 literal 0 HcmV?d00001 diff --git a/python_easy_chess_gui.py b/python_easy_chess_gui.py index 5e35d85..d2581ac 100644 --- a/python_easy_chess_gui.py +++ b/python_easy_chess_gui.py @@ -374,7 +374,8 @@ class RunEngine(threading.Thread): def __init__(self, eng_queue, engine_config_file, engine_path_and_file, engine_id_name, max_depth=MAX_DEPTH, base_ms=300000, inc_ms=1000, tc_type='fischer', - period_moves=0, is_stream_search_info=True): + period_moves=0, is_stream_search_info=True, + existing_engine=None): """ Run engine as opponent or as adviser. @@ -383,6 +384,8 @@ def __init__(self, eng_queue, engine_config_file, engine_path_and_file, :param engine_path_and_file: :param engine_id_name: :param max_depth: + :param existing_engine: An existing chess.engine.SimpleEngine instance + to reuse instead of spawning a new process. """ threading.Thread.__init__(self) self._kill = threading.Event() @@ -398,7 +401,7 @@ def __init__(self, eng_queue, engine_config_file, engine_path_and_file, self.nps = 0 self.max_depth = max_depth self.eng_queue = eng_queue - self.engine = None + self.engine = existing_engine self.board = None self.analysis = is_stream_search_info self.is_nomove_number_in_variation = True @@ -468,32 +471,34 @@ def run(self): If there is error we still send bestmove None. """ - folder = Path(self.engine_path_and_file) - folder = folder.parents[0] + # Reuse existing engine if provided + if self.engine is None: + folder = Path(self.engine_path_and_file) + folder = folder.parents[0] - try: - if sys_os == 'Windows': - self.engine = chess.engine.SimpleEngine.popen_uci( - self.engine_path_and_file, cwd=folder, - creationflags=subprocess.CREATE_NO_WINDOW) - else: - self.engine = chess.engine.SimpleEngine.popen_uci( - self.engine_path_and_file, cwd=folder) - except chess.engine.EngineTerminatedError: - logging.warning('Failed to start {}.'.format(self.engine_path_and_file)) - self.eng_queue.put('bestmove {}'.format(self.bm)) - return - except Exception: - logging.exception('Failed to start {}.'.format( - self.engine_path_and_file)) - self.eng_queue.put('bestmove {}'.format(self.bm)) - return + try: + if sys_os == 'Windows': + self.engine = chess.engine.SimpleEngine.popen_uci( + self.engine_path_and_file, cwd=folder, + creationflags=subprocess.CREATE_NO_WINDOW) + else: + self.engine = chess.engine.SimpleEngine.popen_uci( + self.engine_path_and_file, cwd=folder) + except chess.engine.EngineTerminatedError: + logging.warning('Failed to start {}.'.format(self.engine_path_and_file)) + self.eng_queue.put('bestmove {}'.format(self.bm)) + return + except Exception: + logging.exception('Failed to start {}.'.format( + self.engine_path_and_file)) + self.eng_queue.put('bestmove {}'.format(self.bm)) + return - # Set engine option values - try: - self.configure_engine() - except Exception: - logging.exception('Failed to configure engine.') + # Set engine option values + try: + self.configure_engine() + except Exception: + logging.exception('Failed to configure engine.') # Set search limits if self.tc_type == 'delay': @@ -629,14 +634,25 @@ def run(self): logging.info(f'bestmove {self.bm}') def quit_engine(self): - """Quit engine.""" + """Quit engine. + + Safe to call multiple times; subsequent calls are no-ops. + """ + if self.engine is None: + return logging.info('quit engine') try: self.engine.quit() - except AttributeError: - logging.info('AttributeError, self.engine is already None') except Exception: logging.exception('Failed to quit engine.') + self.engine = None + + def get_engine(self): + """Return the engine instance without quitting it. + + This allows the engine process to be reused across moves. + """ + return self.engine def short_variation_san(self): """Returns variation in san but without move numbers.""" @@ -1695,6 +1711,9 @@ def play_game(self, window: sg.Window, board: chess.Board): is_search_stop_for_resign = False is_search_stop_for_user_wins = False is_search_stop_for_user_draws = False + + # Engine instance that persists across moves + persistent_engine = None is_hide_book1 = True is_hide_book2 = True is_hide_search_info = True @@ -2179,7 +2198,8 @@ def play_game(self, window: sg.Window, board: chess.Board): self.queue, self.engine_config_file, self.opp_path_and_file, self.opp_id_name, self.max_depth, engine_timer.base, engine_timer.inc, tc_type=engine_timer.tc_type, - period_moves=board.fullmove_number + period_moves=board.fullmove_number, + existing_engine=persistent_engine ) search.get_board(board) search.daemon = True @@ -2287,7 +2307,8 @@ def play_game(self, window: sg.Window, board: chess.Board): break search.join() - search.quit_engine() + # Keep engine alive for reuse; retrieve instance + persistent_engine = search.get_engine() is_book_from_gui = False # If engine failed to send a legal move @@ -2371,6 +2392,17 @@ def play_game(self, window: sg.Window, board: chess.Board): # Auto-save game logging.info('Saving game automatically') + + # Quit the persistent engine now that the game is over or + # the user is exiting play mode (e.g. neutral, new game, resign). + if persistent_engine is not None: + logging.info('Quitting persistent engine at end of game') + try: + persistent_engine.quit() + except Exception: + logging.exception('Failed to quit persistent engine.') + finally: + persistent_engine = None if is_user_resigns: self.game.headers['Result'] = '0-1' if self.is_user_white else '1-0' self.game.headers['Termination'] = '{} resigns'.format(