Skip to content

AssertionError is thrown if async analysis is cancelled too soon #1116

Open
@mooskagh

Description

@mooskagh

I'm writing a website that listens to a pgn feed and runs an analysis of the current position in an asyncio task. When a new position comes, the analysis task is cancelled, and new task started.

If analysis is cancelled too soon (two updates come one after another), python-chess throws an AssertionError exception.

Traceback (most recent call last):
  File "/home/crem/dev/lczero-live/backend/analyzer.py", line 157, in _uci_worker_think
    with await self._engine.analysis(
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/crem/dev/lczero-live/.venv/lib/python3.12/site-packages/chess/engine.py", line 1774, in analysis
    return await self.communicate(UciAnalysisCommand)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/crem/dev/lczero-live/.venv/lib/python3.12/site-packages/chess/engine.py", line 997, in communicate
    self.next_command.set_finished()
  File "/home/crem/dev/lczero-live/.venv/lib/python3.12/site-packages/chess/engine.py", line 1269, in set_finished
    assert self.state in [CommandState.ACTIVE, CommandState.CANCELLING], self.state
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: CommandState.NEW

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugengineChess engine integration

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions