]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-97696 Remove unnecessary check for eager_start kwarg (#104188)
authorJacob Bower <1978924+jbower-fb@users.noreply.github.com>
Tue, 9 May 2023 00:51:58 +0000 (17:51 -0700)
committerGitHub <noreply@github.com>
Tue, 9 May 2023 00:51:58 +0000 (00:51 +0000)
Instead, add docstring to create_eager_task_factory.

Lib/asyncio/tasks.py

index 7eb647bd129819179747620f9232ee89fe1c3aea..8d5bde09ea9b5b2bb91d3675809fb916c803aede 100644 (file)
@@ -942,18 +942,31 @@ def run_coroutine_threadsafe(coro, loop):
 
 
 def create_eager_task_factory(custom_task_constructor):
+    """Create a function suitable for use as a task factory on an event-loop.
 
-    if "eager_start" not in inspect.signature(custom_task_constructor).parameters:
-        raise TypeError(
-            "Provided constructor does not support eager task execution")
+           Example usage:
+
+               loop.set_task_factory(
+                   asyncio.create_eager_task_factory(my_task_constructor))
+
+           Now, tasks created will be started immediately (rather than being first
+           scheduled to an event loop). The constructor argument can be any callable
+           that returns a Task-compatible object and has a signature compatible
+           with `Task.__init__`; it must have the `eager_start` keyword argument.
+
+           Most applications will use `Task` for `custom_task_constructor` and in
+        this case there's no need to call `create_eager_task_factory()`
+        directly. Instead the  global `eager_task_factory` instance can be
+        used. E.g. `loop.set_task_factory(asyncio.eager_task_factory)`.
+           """
 
     def factory(loop, coro, *, name=None, context=None):
         return custom_task_constructor(
             coro, loop=loop, name=name, context=context, eager_start=True)
 
-
     return factory
 
+
 eager_task_factory = create_eager_task_factory(Task)