diff options
author | Alex Grönholm <alex.gronholm@nextday.fi> | 2021-09-12 01:47:31 +0300 |
---|---|---|
committer | Alex Grönholm <alex.gronholm@nextday.fi> | 2021-09-12 01:47:31 +0300 |
commit | a58fca290e0831d377d496a69101e5e3dc4c604e (patch) | |
tree | 8beb7504e7113ff1f01fb610513bb72745fa91ba /src/apscheduler/eventbrokers/local.py | |
parent | 59ea7376985ef2c8b8b6b6d6df6b1b3be958480c (diff) | |
download | apscheduler-a58fca290e0831d377d496a69101e5e3dc4c604e.tar.gz |
Refactored event brokers to use exit stacks
Diffstat (limited to 'src/apscheduler/eventbrokers/local.py')
-rw-r--r-- | src/apscheduler/eventbrokers/local.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/apscheduler/eventbrokers/local.py b/src/apscheduler/eventbrokers/local.py index ab75575..a657f4e 100644 --- a/src/apscheduler/eventbrokers/local.py +++ b/src/apscheduler/eventbrokers/local.py @@ -2,7 +2,7 @@ from __future__ import annotations from asyncio import iscoroutinefunction from concurrent.futures import ThreadPoolExecutor -from logging import Logger, getLogger +from contextlib import ExitStack from typing import Any, Callable, Iterable, Optional import attr @@ -16,14 +16,15 @@ from .base import BaseEventBroker @attr.define(eq=False) class LocalEventBroker(BaseEventBroker): _executor: ThreadPoolExecutor = attr.field(init=False) - _logger: Logger = attr.field(init=False, factory=lambda: getLogger(__name__)) + _exit_stack: ExitStack = attr.field(init=False) - def __enter__(self) -> LocalEventBroker: - self._executor = ThreadPoolExecutor(1) + def __enter__(self): + self._exit_stack = ExitStack() + self._executor = self._exit_stack.enter_context(ThreadPoolExecutor(1)) return self def __exit__(self, exc_type, exc_val, exc_tb): - self._executor.shutdown(wait=exc_type is None) + self._exit_stack.__exit__(exc_type, exc_val, exc_tb) del self._executor def subscribe(self, callback: Callable[[Event], Any], @@ -35,6 +36,9 @@ class LocalEventBroker(BaseEventBroker): return super().subscribe(callback, event_types) def publish(self, event: Event) -> None: + self.publish_local(event) + + def publish_local(self, event: Event) -> None: event_type = type(event) for subscription in list(self._subscriptions.values()): if subscription.event_types is None or event_type in subscription.event_types: |