@@ -90,11 +90,13 @@ def __init__(
90
90
time : datetime .time | Sequence [datetime .time ],
91
91
count : int | None ,
92
92
reconnect : bool ,
93
- loop : asyncio .AbstractEventLoop ,
93
+ loop : asyncio .AbstractEventLoop | None ,
94
+ name : str | None ,
94
95
) -> None :
95
96
self .coro : LF = coro
96
97
self .reconnect : bool = reconnect
97
- self .loop : asyncio .AbstractEventLoop = loop
98
+ self .loop : asyncio .AbstractEventLoop | None = loop
99
+ self .name : str = f'pycord-ext-task ({ id (self ):#x} ): { coro .__qualname__ } ' if name in (None , MISSING ) else name
98
100
self .count : int | None = count
99
101
self ._current_loop = 0
100
102
self ._handle : SleepHandle = MISSING
@@ -145,8 +147,15 @@ async def _call_loop_function(self, name: str, *args: Any, **kwargs: Any) -> Non
145
147
if name .endswith ("_loop" ):
146
148
setattr (self , f"_{ name } _running" , False )
147
149
150
+ def _create_task (self , * args : Any , ** kwargs : Any ) -> asyncio .Task [None ]:
151
+ if self .loop is None :
152
+ meth = asyncio .create_task
153
+ else :
154
+ meth = self .loop .create_task
155
+ return meth (self ._loop (* args , ** kwargs ), name = self .name )
156
+
148
157
def _try_sleep_until (self , dt : datetime .datetime ):
149
- self ._handle = SleepHandle (dt = dt , loop = self . loop )
158
+ self ._handle = SleepHandle (dt = dt , loop = asyncio . get_running_loop () )
150
159
return self ._handle .wait ()
151
160
152
161
async def _loop (self , * args : Any , ** kwargs : Any ) -> None :
@@ -218,6 +227,7 @@ def __get__(self, obj: T, objtype: type[T]) -> Loop[LF]:
218
227
count = self .count ,
219
228
reconnect = self .reconnect ,
220
229
loop = self .loop ,
230
+ name = self .name ,
221
231
)
222
232
copy ._injected = obj
223
233
copy ._before_loop = self ._before_loop
@@ -330,10 +340,7 @@ def start(self, *args: Any, **kwargs: Any) -> asyncio.Task[None]:
330
340
if self ._injected is not None :
331
341
args = (self ._injected , * args )
332
342
333
- if self .loop is MISSING :
334
- self .loop = asyncio .get_event_loop ()
335
-
336
- self ._task = self .loop .create_task (self ._loop (* args , ** kwargs ))
343
+ self ._task = self ._create_task (* args , ** kwargs )
337
344
return self ._task
338
345
339
346
def stop (self ) -> None :
@@ -738,6 +745,7 @@ def loop(
738
745
count : int | None = None ,
739
746
reconnect : bool = True ,
740
747
loop : asyncio .AbstractEventLoop = MISSING ,
748
+ name : str | None = MISSING ,
741
749
) -> Callable [[LF ], Loop [LF ]]:
742
750
"""A decorator that schedules a task in the background for you with
743
751
optional reconnect logic. The decorator returns a :class:`Loop`.
@@ -793,6 +801,7 @@ def decorator(func: LF) -> Loop[LF]:
793
801
time = time ,
794
802
reconnect = reconnect ,
795
803
loop = loop ,
804
+ name = name ,
796
805
)
797
806
798
807
return decorator
0 commit comments