Skip to content

Commit

Permalink
Add __slots__ to timer helpers (#9406)
Browse files Browse the repository at this point in the history
Co-authored-by: Sam Bull <[email protected]>
(cherry picked from commit 24b0e6f)
  • Loading branch information
bdraco committed Oct 3, 2024
1 parent e1320b7 commit fbbcaed
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGES/9406.misc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Reduced memory required for timer objects created during the client request lifecycle -- by :user:`bdraco`.
10 changes: 10 additions & 0 deletions aiohttp/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -617,6 +617,8 @@ def calculate_timeout_when(
class TimeoutHandle:
"""Timeout handle"""

__slots__ = ("_timeout", "_loop", "_ceil_threshold", "_callbacks")

def __init__(
self,
loop: asyncio.AbstractEventLoop,
Expand Down Expand Up @@ -665,11 +667,17 @@ def __call__(self) -> None:


class BaseTimerContext(ContextManager["BaseTimerContext"]):

__slots__ = ()

def assert_timeout(self) -> None:
"""Raise TimeoutError if timeout has been exceeded."""


class TimerNoop(BaseTimerContext):

__slots__ = ()

def __enter__(self) -> BaseTimerContext:
return self

Expand All @@ -685,6 +693,8 @@ def __exit__(
class TimerContext(BaseTimerContext):
"""Low resolution timeout context manager"""

__slots__ = ("_loop", "_tasks", "_cancelled", "_cancelling")

def __init__(self, loop: asyncio.AbstractEventLoop) -> None:
self._loop = loop
self._tasks: List[asyncio.Task[Any]] = []
Expand Down
5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,8 @@ skip = "pp*"
[tool.codespell]
skip = '.git,*.pdf,*.svg,Makefile,CONTRIBUTORS.txt,venvs,_build'
ignore-words-list = 'te'

[tool.slotscheck]
# TODO(3.13): Remove aiohttp.helpers once https://github.com/python/cpython/pull/106771
# is available in all supported cpython versions
exclude-modules = "(^aiohttp\\.helpers)"

0 comments on commit fbbcaed

Please sign in to comment.