mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
gh-104144: Skip scheduling a done callback if a TaskGroup task completes eagerly (#104140)
Co-authored-by: Carl Meyer <carl@oddbird.net>
This commit is contained in:
parent
f3e7eb48f8
commit
52d8f36e8c
2 changed files with 9 additions and 2 deletions
|
@ -164,8 +164,14 @@ class TaskGroup:
|
|||
else:
|
||||
task = self._loop.create_task(coro, context=context)
|
||||
tasks._set_task_name(task, name)
|
||||
task.add_done_callback(self._on_task_done)
|
||||
self._tasks.add(task)
|
||||
# optimization: Immediately call the done callback if the task is
|
||||
# already done (e.g. if the coro was able to complete eagerly),
|
||||
# and skip scheduling a done callback
|
||||
if task.done():
|
||||
self._on_task_done(task)
|
||||
else:
|
||||
self._tasks.add(task)
|
||||
task.add_done_callback(self._on_task_done)
|
||||
return task
|
||||
|
||||
# Since Python 3.8 Tasks propagate all exceptions correctly,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue