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