New submission from Jason Haydaman <jhayda...@sightlineinnovation.com>:
When the concurrent Future wrapped by asyncio.wrap_future has set_result or set_exception called multiple times, I get the following traceback: Traceback (most recent call last): File "/usr/local/lib/python3.6/asyncio/events.py", line 145, in _run self._callback(*self._args) File "/usr/local/lib/python3.6/asyncio/futures.py", line 399, in _set_state _copy_future_state(other, future) File "/usr/local/lib/python3.6/asyncio/futures.py", line 369, in _copy_future_state assert not dest.done() AssertionError Minimal reproducible example: import asyncio import concurrent.futures f = concurrent.futures.Future() async_f = asyncio.wrap_future(f) f.set_result(1) f.set_result(1) loop = asyncio.get_event_loop() loop.run_until_complete(async_f) The documentation says that set_result and set_exception are only meant for Executors, so, arguably using them outside of that context would fall into undocumented behavior rather than a bug. But it still seems like it should be the second set_result that raises something like InvalidStateError. Alternatively, this can be avoided if _copy_future_state checks for done in addition to cancellation. What should happen here? ---------- components: Library (Lib), asyncio messages: 315030 nosy: Jason Haydaman, asvetlov, yselivanov priority: normal severity: normal status: open title: AssertionError on await of Future returned by asyncio.wrap_future versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33238> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com