dbrattli / aioreactive

Async/await reactive tools for Python 3.11+
MIT License
350 stars 24 forks source link

split.py example fails with InvalidStateError #35

Closed iangoldby closed 6 months ago

iangoldby commented 1 year ago
  1. Create a new Python 3.9 environment.
  2. pip install aioreactive
  3. Download and run split.py from examples/streams Expected result: see values being printed out. Actual result:
    Exception in callback MailboxProcessor.__process_events()
    handle: <Handle MailboxProcessor.__process_events()>
    Traceback (most recent call last):
    File "C:\Users\Ian\.conda\envs\aioreactive\lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
    File "C:\Users\Ian\.conda\envs\aioreactive\lib\site-packages\expression\core\mailbox.py", line 152, in __process_events
    cont(msg)
    File "C:\Users\Ian\.conda\envs\aioreactive\lib\site-packages\expression\core\aiotools.py", line 45, in done
    future.set_result(value)
    asyncio.exceptions.InvalidStateError: invalid state
    Exception in callback MailboxProcessor.__process_events()
    handle: <Handle MailboxProcessor.__process_events()>
    Traceback (most recent call last):
    File "C:\Users\Ian\.conda\envs\aioreactive\lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
    File "C:\Users\Ian\.conda\envs\aioreactive\lib\site-packages\expression\core\mailbox.py", line 152, in __process_events
    cont(msg)
    File "C:\Users\Ian\.conda\envs\aioreactive\lib\site-packages\expression\core\aiotools.py", line 45, in done
    future.set_result(value)
    asyncio.exceptions.InvalidStateError: invalid state
davidia commented 7 months ago

The asyncio event loop is closing immediately and cancelling the futures that do the work resulting in this error. If you stick

await asyncio.sleep(5)

at the end of the main function the error goes away.