You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
The text was updated successfully, but these errors were encountered:
Having this awkward lock did help to work around it.
It's ugly because I cannot have overlapping async with, so I acquire/release manually and then release in finally: for the case engine.analysis throws an exception.
awaitself._uci_cancelation_lock.acquire()
withawaitself._engine.analysis(board=board) asanalysis:
self._uci_cancelation_lock.release()
# do the stufffinally:
try:
self._uci_cancelation_lock.release()
exceptRuntimeError:
pass### somewhere else:asyncwithself._uci_cancelation_lock:
task.cancel()
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.The text was updated successfully, but these errors were encountered: