Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor waiting for tasks to complete from task group on the asyncio backend #854

Merged
merged 6 commits into from
Jan 4, 2025

Conversation

graingert
Copy link
Collaborator

@graingert graingert commented Jan 4, 2025

Changes

This uses the approach that asyncio uses for asyncio.TaskGroup, this means we only have one done callback per task which on the C implementation uses the efficient first callback slot, and further callbacks need to be added to a list - which is slower.

The old implementation added and removed a lot of callbacks on initiation and cancellation and is slower than it needs to be

Checklist

This is a simple refactor so no tests here, also no update to the docs - we probably save an event loop cycle here or there.

If this is a user-facing code change, like a bugfix or a new feature, please ensure that
you've fulfilled the following conditions (where applicable):

  • You've added tests (in tests/) added which would fail without your patch
  • You've updated the documentation (in docs/, in case of behavior changes or new
    features)
  • You've added a new changelog entry (in docs/versionhistory.rst).

If this is a trivial change, like a typo fix or a code reformatting, then you can ignore
these instructions.

Updating the changelog

If there are no entries after the last release, use **UNRELEASED** as the version.
If, say, your patch fixes issue #123, the entry should look like this:

- Fix big bad boo-boo in task groups
  (`#123 <https://github.com/agronholm/anyio/issues/123>`_; PR by @yourgithubaccount)

If there's no issue linked, just link to your pull request instead by updating the
changelog after you've created the PR.

@graingert graingert changed the title refactor waiting for tasks to propagate from task group on the asyncio backend refactor waiting for tasks to complete from task group on the asyncio backend Jan 4, 2025
@graingert graingert marked this pull request as ready for review January 4, 2025 10:36
docs/versionhistory.rst Outdated Show resolved Hide resolved
Copy link
Owner

@agronholm agronholm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Formatting.

src/anyio/_backends/_asyncio.py Outdated Show resolved Hide resolved
src/anyio/_backends/_asyncio.py Show resolved Hide resolved
src/anyio/_backends/_asyncio.py Outdated Show resolved Hide resolved
@agronholm agronholm merged commit 6d612a9 into master Jan 4, 2025
17 checks passed
@agronholm agronholm deleted the simplify-wait-tg-tasks branch January 4, 2025 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants