Repository navigation
Commit 3945eaf
* gh-158097: Make test_staggered_race_with_eager_tasks deterministic
staggered_race() awaits the coroutines it is given inline, so the
"await asyncio.sleep(0)" in the test's fail() helper suspended the
run_one_coro() task running it and left a scheduled resumption behind.
If the asyncio.sleep(1) winner (started 0.25s late by the stagger delay)
completes before that resumption runs, the winner's cancel() sets
_must_cancel and the resumption throws CancelledError into fail(), so
excs[2] reports a CancelledError instead of a ValueError.
Pending timers are only moved onto the ready queue at the top of
BaseEventLoop._run_once() and are appended after the handles already
queued, so the t=0.50s stagger timer and the t=1.25s sleep(1) timer run
in due-time order. When both are due in the same _run_once() - which is
what a busy CI machine causes - the stagger timer starts fail(), which
immediately suspends again, and the very next handle is the winner.
Raise straight away instead, so the ValueError is stored in excs[2] in
the same step that starts the coroutine and there is no longer a
scheduled resumption for a cancellation to overtake. The outcome no
longer depends on the event loop getting another iteration.
* Update Lib/test/test_asyncio/test_eager_task_factory.py
* Delete Misc/NEWS.d/next/Tests/2026-09-30-00-00-00.gh-issue-158097.pcB3mO.rst
---------
Co-authored-by: abhinav-phi <abhinav-phi@users.noreply.github.com>
Co-authored-by: Andrew Svetlov <andrew.svetlov@gmail.com>
1 parent 05486ac commit 3945eaf
1 file changed
Lines changed: 3 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
217 | 217 | | |
218 | 218 | | |
219 | 219 | | |
220 | | - | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
221 | 223 | | |
222 | 224 | | |
223 | 225 | | |
| |||
0 commit comments