Skip to content

ReAwaitable does not support concurrent await call #2108

Description

@proboscis

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions