From 8015ed02f252c9eef75ca23ea6010394c6ee1827 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 8 Jul 2023 12:00:40 -1000 Subject: [PATCH 1/3] feat: improve incoming data processing performance - Make a few more classes that do not need dynamic attributes slotted --- src/zeroconf/_core.py | 12 ++++++++++++ src/zeroconf/_logger.py | 1 + src/zeroconf/_services/browser.py | 22 +++++++++++++++++++++- src/zeroconf/_services/registry.py | 2 ++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/zeroconf/_core.py b/src/zeroconf/_core.py index 1f74dcd5e..ab8e72e52 100644 --- a/src/zeroconf/_core.py +++ b/src/zeroconf/_core.py @@ -151,6 +151,18 @@ def _make_wrapped_transport(transport: asyncio.DatagramTransport) -> _WrappedTra class AsyncEngine: """An engine wraps sockets in the event loop.""" + __slots__ = ( + 'loop', + 'zc', + 'protocols', + 'readers', + 'senders', + 'running_event', + '_listen_socket', + '_respond_sockets', + '_cleanup_timer', + ) + def __init__( self, zeroconf: 'Zeroconf', diff --git a/src/zeroconf/_logger.py b/src/zeroconf/_logger.py index b0e66bc90..f179078f6 100644 --- a/src/zeroconf/_logger.py +++ b/src/zeroconf/_logger.py @@ -38,6 +38,7 @@ def set_logger_level_if_unset() -> None: class QuietLogger: + _seen_logs: Dict[str, Union[int, tuple]] = {} @classmethod diff --git a/src/zeroconf/_services/browser.py b/src/zeroconf/_services/browser.py index fef49383d..a76e98172 100644 --- a/src/zeroconf/_services/browser.py +++ b/src/zeroconf/_services/browser.py @@ -85,6 +85,8 @@ class _DNSPointerOutgoingBucket: """A DNSOutgoing bucket.""" + __slots__ = ('now', 'out', 'bytes') + def __init__(self, now: float, multicast: bool) -> None: """Create a bucke to wrap a DNSOutgoing.""" self.now = now @@ -196,12 +198,14 @@ class QueryScheduler: """ + __slots__ = ('_schedule_changed_event', '_types', '_next_time', '_first_random_delay_interval', '_delay') + def __init__( self, types: Set[str], delay: int, first_random_delay_interval: Tuple[int, int], - ): + ) -> None: self._schedule_changed_event: Optional[asyncio.Event] = None self._types = types self._next_time: Dict[str, float] = {} @@ -261,6 +265,22 @@ def process_ready_types(self, now: float) -> List[str]: class _ServiceBrowserBase(RecordUpdateListener): """Base class for ServiceBrowser.""" + __slots__ = ( + 'types', + 'zc', + 'addr', + 'port', + 'multicast', + 'question_type', + '_pending_handlers', + '_service_state_changed', + 'query_scheduler', + 'done', + '_first_request', + '_next_send_timer', + '_query_sender_task', + ) + def __init__( self, zc: 'Zeroconf', diff --git a/src/zeroconf/_services/registry.py b/src/zeroconf/_services/registry.py index 1c4ad0859..fd2ad5cee 100644 --- a/src/zeroconf/_services/registry.py +++ b/src/zeroconf/_services/registry.py @@ -33,6 +33,8 @@ class ServiceRegistry: the event loop as it is not thread safe. """ + __slots__ = ("_services", "types", "servers") + def __init__( self, ) -> None: From 58afab9fa43b9efd7d8d996a6bffe5f0a80fcbca Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 8 Jul 2023 12:21:30 -1000 Subject: [PATCH 2/3] fix: add missing ones in services --- src/zeroconf/_services/__init__.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/zeroconf/_services/__init__.py b/src/zeroconf/_services/__init__.py index 2882fce6a..968b5dafe 100644 --- a/src/zeroconf/_services/__init__.py +++ b/src/zeroconf/_services/__init__.py @@ -46,6 +46,9 @@ def update_service(self, zc: 'Zeroconf', type_: str, name: str) -> None: class Signal: + + __slots__ = ('_handlers',) + def __init__(self) -> None: self._handlers: List[Callable[..., None]] = [] @@ -59,6 +62,9 @@ def registration_interface(self) -> 'SignalRegistrationInterface': class SignalRegistrationInterface: + + __slots__ = ('_handlers',) + def __init__(self, handlers: List[Callable[..., None]]) -> None: self._handlers = handlers From 6b2c3bae743bdc3bc19fb2a8ff003c207fbd934b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 8 Jul 2023 12:44:40 -1000 Subject: [PATCH 3/3] Update src/zeroconf/_logger.py --- src/zeroconf/_logger.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/zeroconf/_logger.py b/src/zeroconf/_logger.py index f179078f6..b0e66bc90 100644 --- a/src/zeroconf/_logger.py +++ b/src/zeroconf/_logger.py @@ -38,7 +38,6 @@ def set_logger_level_if_unset() -> None: class QuietLogger: - _seen_logs: Dict[str, Union[int, tuple]] = {} @classmethod