1111from __future__ import annotations
1212
1313import asyncio
14+ import sys
1415import threading
15- from asyncio import CancelledError , Queue , QueueEmpty , Task , create_task
16+ from asyncio import CancelledError , QueueEmpty , Task , create_task
1617from contextlib import contextmanager
1718from functools import partial
1819from time import perf_counter
2223 Awaitable ,
2324 Callable ,
2425 Generator ,
26+ Generic ,
2527 Iterable ,
2628 Type ,
2729 TypeVar ,
2830 cast ,
31+ overload ,
2932)
3033from weakref import WeakSet
3134
3235from textual import Logger , events , log , messages
3336from textual ._callback import invoke
37+ from textual ._compat import cached_property
3438from textual ._context import NoActiveAppError , active_app , active_message_pump
3539from textual ._context import message_hook as message_hook_context_var
3640from textual ._context import prevent_message_types_stack
@@ -114,7 +118,6 @@ class MessagePump(metaclass=_MessagePumpMeta):
114118 """Base class which supplies a message pump."""
115119
116120 def __init__ (self , parent : MessagePump | None = None ) -> None :
117- self ._message_queue : Queue [Message | None ] = Queue ()
118121 self ._parent = parent
119122 self ._running : bool = False
120123 self ._closing : bool = False
@@ -125,7 +128,6 @@ def __init__(self, parent: MessagePump | None = None) -> None:
125128 self ._timers : WeakSet [Timer ] = WeakSet ()
126129 self ._last_idle : float = time ()
127130 self ._max_idle : float | None = None
128- self ._mounted_event = asyncio .Event ()
129131 self ._is_mounted = False
130132 """Having this explicit Boolean is an optimization.
131133
@@ -143,6 +145,14 @@ def __init__(self, parent: MessagePump | None = None) -> None:
143145
144146 """
145147
148+ @cached_property
149+ def _message_queue (self ) -> asyncio .Queue [Message | None ]:
150+ return asyncio .Queue ()
151+
152+ @cached_property
153+ def _mounted_event (self ) -> asyncio .Event :
154+ return asyncio .Event ()
155+
146156 @property
147157 def _prevent_message_types_stack (self ) -> list [set [type [Message ]]]:
148158 """The stack that manages prevented messages."""
0 commit comments