Skip to content

Commit 83c8517

Browse files
committed
fix ext.tasks
1 parent 11a32b1 commit 83c8517

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

discord/ext/tasks/__init__.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,13 @@ def __init__(
9090
time: datetime.time | Sequence[datetime.time],
9191
count: int | None,
9292
reconnect: bool,
93-
loop: asyncio.AbstractEventLoop,
93+
loop: asyncio.AbstractEventLoop | None,
94+
name: str | None,
9495
) -> None:
9596
self.coro: LF = coro
9697
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
98100
self.count: int | None = count
99101
self._current_loop = 0
100102
self._handle: SleepHandle = MISSING
@@ -145,8 +147,15 @@ async def _call_loop_function(self, name: str, *args: Any, **kwargs: Any) -> Non
145147
if name.endswith("_loop"):
146148
setattr(self, f"_{name}_running", False)
147149

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+
148157
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())
150159
return self._handle.wait()
151160

152161
async def _loop(self, *args: Any, **kwargs: Any) -> None:
@@ -218,6 +227,7 @@ def __get__(self, obj: T, objtype: type[T]) -> Loop[LF]:
218227
count=self.count,
219228
reconnect=self.reconnect,
220229
loop=self.loop,
230+
name=self.name,
221231
)
222232
copy._injected = obj
223233
copy._before_loop = self._before_loop
@@ -330,10 +340,7 @@ def start(self, *args: Any, **kwargs: Any) -> asyncio.Task[None]:
330340
if self._injected is not None:
331341
args = (self._injected, *args)
332342

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)
337344
return self._task
338345

339346
def stop(self) -> None:
@@ -738,6 +745,7 @@ def loop(
738745
count: int | None = None,
739746
reconnect: bool = True,
740747
loop: asyncio.AbstractEventLoop = MISSING,
748+
name: str | None = MISSING,
741749
) -> Callable[[LF], Loop[LF]]:
742750
"""A decorator that schedules a task in the background for you with
743751
optional reconnect logic. The decorator returns a :class:`Loop`.
@@ -793,6 +801,7 @@ def decorator(func: LF) -> Loop[LF]:
793801
time=time,
794802
reconnect=reconnect,
795803
loop=loop,
804+
name=name,
796805
)
797806

798807
return decorator

0 commit comments

Comments
 (0)