Skip to content

Commit c809133

Browse files
committed
add eager_start to create_task
1 parent aeb9b65 commit c809133

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

Lib/asyncio/base_events.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -458,24 +458,26 @@ def create_future(self):
458458
"""Create a Future object attached to the loop."""
459459
return futures.Future(loop=self)
460460

461-
def create_task(self, coro, *, name=None, context=None):
461+
def create_task(self, coro, *, name=None, context=None, eager=None):
462462
"""Schedule a coroutine object.
463463
464464
Return a task object.
465465
"""
466466
self._check_closed()
467467
if self._task_factory is None:
468-
task = tasks.Task(coro, loop=self, name=name, context=context)
468+
task = tasks.Task(coro, loop=self, name=name, context=context, eager_start=eager_start)
469469
if task._source_traceback:
470470
del task._source_traceback[-1]
471471
else:
472-
if context is None:
472+
if context is None and eager_start is None:
473473
# Use legacy API if context is not needed
474474
task = self._task_factory(self, coro)
475-
else:
475+
task.set_name(name)
476+
elif eager_start is None:
476477
task = self._task_factory(self, coro, context=context)
477-
478-
task.set_name(name)
478+
task.set_name(name)
479+
else:
480+
task = self._task_factory(self, coro, context=context, eager=eager_start, name=name)
479481

480482
return task
481483

Lib/asyncio/taskgroups.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ async def _aexit(self, et, exc):
178178
exc = None
179179

180180

181-
def create_task(self, coro, *, name=None, context=None):
181+
def create_task(self, coro, *, name=None, context=None, eager_start=None):
182182
"""Create a new task in this group and return it.
183183
184184
Similar to `asyncio.create_task`.
@@ -192,10 +192,12 @@ def create_task(self, coro, *, name=None, context=None):
192192
if self._aborting:
193193
coro.close()
194194
raise RuntimeError(f"TaskGroup {self!r} is shutting down")
195-
if context is None:
195+
if context is None and eager_start is None:
196196
task = self._loop.create_task(coro, name=name)
197-
else:
197+
elif eager_start is None:
198198
task = self._loop.create_task(coro, name=name, context=context)
199+
else:
200+
task = self._loop.create_task(coro, name=name, context=context, eager_start=eager_start)
199201

200202
# optimization: Immediately call the done callback if the task is
201203
# already done (e.g. if the coro was able to complete eagerly),

Lib/asyncio/tasks.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ def __wakeup(self, future):
384384
Task = _CTask = _asyncio.Task
385385

386386

387-
def create_task(coro, *, name=None, context=None):
387+
def create_task(coro, *, name=None, context=None, eager_start=None):
388388
"""Schedule the execution of a coroutine object in a spawn task.
389389
390390
Return a Task object.
@@ -393,8 +393,10 @@ def create_task(coro, *, name=None, context=None):
393393
if context is None:
394394
# Use legacy API if context is not needed
395395
task = loop.create_task(coro, name=name)
396-
else:
396+
elif eager_start is None:
397397
task = loop.create_task(coro, name=name, context=context)
398+
else:
399+
task = loop.create_task(coro, name=name, context=context, eager_start)
398400

399401
return task
400402

@@ -1008,9 +1010,11 @@ def create_eager_task_factory(custom_task_constructor):
10081010
used. E.g. `loop.set_task_factory(asyncio.eager_task_factory)`.
10091011
"""
10101012

1011-
def factory(loop, coro, *, name=None, context=None):
1013+
def factory(loop, coro, *, name=None, context=None, eager_start=None):
1014+
if eager_start is None:
1015+
eager_start = True
10121016
return custom_task_constructor(
1013-
coro, loop=loop, name=name, context=context, eager_start=True)
1017+
coro, loop=loop, name=name, context=context, eager_start=eager_start)
10141018

10151019
return factory
10161020

0 commit comments

Comments
 (0)