returns icon indicating copy to clipboard operation
returns copied to clipboard

ReAwaitable does not support concurrent await call

Open proboscis opened this issue 11 months ago • 1 comments

Bug report

What's wrong

ReAwaitable cannot be awaited from multiple asyncio tasks simultaneously, and raises exception.

<user>/Library/Caches/pypoetry/virtualenvs/project-env/bin/python /Applications/PyCharm.app/Contents/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py --target test_reawaitable_concurrency.py::test_concurrent_awaitable
Testing started at 16:14 ...
Launching pytest with arguments test_reawaitable_concurrency.py::test_concurrent_awaitable --no-header --no-summary -q in <user>/repos/project/tests/test_primitives/test_reawaitable

============================= test session starts ==============================
collecting ... collected 2 items
Running 2 items in this shard: tests/test_primitives/test_reawaitable/test_reawaitable_concurrency.py::test_concurrent_awaitable[trio], tests/test_primitives/test_reawaitable/test_reawaitable_concurrency.py::test_concurrent_awaitable[asyncio]

test_reawaitable_concurrency.py::test_concurrent_awaitable[trio] 
test_reawaitable_concurrency.py::test_concurrent_awaitable[asyncio] <user>/Library/Caches/pypoetry/virtualenvs/project-env/lib/python3.12/site-packages/coverage/inorout.py:524: CoverageWarning: Module project was previously imported, but not measured (module-not-measured)
  self.warn(msg, slug="module-not-measured")

ERROR: Coverage failure: total of 1 is less than fail-under=100


============================== 2 failed in 1.29s ===============================
FAILED  [ 50%]
tests/test_primitives/test_reawaitable/test_reawaitable_concurrency.py:10 (test_concurrent_awaitable[trio])
+ Exception Group Traceback (most recent call last):
  |   File "<user>/Library/Caches/pypoetry/virtualenvs/project-env/lib/python3.12/site-packages/_pytest/runner.py", line 341, in from_call
  |     result: TResult | None = func()
  |                              ^^^^^^
  [...multiple frames omitted for brevity...]
  |   File "<user>/repos/project/tests/test_primitives/test_reawaitable/test_reawaitable_concurrency.py", line 17, in test_concurrent_awaitable
  |     async with anyio.create_task_group() as tg:
  |                ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "<user>/Library/Caches/pypoetry/virtualenvs/project-env/lib/python3.12/site-packages/anyio/_backends/_trio.py", line 191, in __aexit__
  |     return await self._nursery_manager.__aexit__(exc_type, exc_val, exc_tb)
  | ExceptionGroup: Exceptions from Trio nursery (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "<user>/repos/project/tests/test_primitives/test_reawaitable/test_reawaitable_concurrency.py", line 16, in await_reawaitable
    |     return await reawaitable
    |            ^^^^^^^^^^^^^^^^^
    |   File "<user>/repos/project/project/primitives/reawaitable.py", line 109, in _awaitable
    |     self._cache = await self._coro
    |                   ^^^^^^^^^^^^^^^^
    | RuntimeError: coroutine is being awaited already
    +------------------------------------
FAILED [100%]
[... similar traceback omitted for brevity ...]
<user>/Library/Caches/pypoetry/virtualenvs/project-env/lib/python3.12/site-packages/pytest_cov/plugin.py:355: CovFailUnderWarning: Coverage failure: total of 1 is less than fail-under=100
  warnings.warn(CovFailUnderWarning(message), stacklevel=1)

How is that should be

ReAwaitable should be awaitable from multiple simultaneous tasks.

System information

  • returns version: 0.25.0
  • pytest version (if any): 8.3.4

proboscis avatar Apr 11 '25 07:04 proboscis

In help is really welcome!

sobolevn avatar Apr 11 '25 07:04 sobolevn