Conversation
run_until_complete making the next run stop earlyrun_until_complete making the next run stop early
tjkuson
marked this pull request as ready for review
October 2, 2026 20:55
tjkuson
requested review from
1st1,
asvetlov,
kumaraditya303 and
willingc
as code owners
October 2, 2026 20:55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Each
run_until_completecall registers its own done callback that only stops the loop whilst that call is running. It no longer stops a run after the call returns.I'll flag that AnyIO currently finds its main task by looking for
asyncio.base_events._run_until_complete_cbin task callbacks. On this branch, it no longer finds it, soanyio.to_threadstarts a new thread per task andanyio.to_processjobs can fail. I think matching on the callback's__module__in AnyIO would fix it.I also tried an alternative that records the current future on the loop instead. It keeps AnyIO working, but adds loop state, hangs in two edge cases, and doesn't fix a later
run_forever().A neater solution would inline
_run_until_complete_cbinto the closure and drop its gh-66619 early return, which is now redundant, but I kept it because removing it make AnyIO fail at import.Closes gh-158406.