forked from p15670423/monkey
Common: Add LockingAgentEventQueueDecorator
This commit is contained in:
parent
cb7add7e59
commit
5d893d64cd
|
@ -2,3 +2,4 @@ from .types import AgentEventSubscriber
|
|||
from .pypubsub_publisher_wrapper import PyPubSubPublisherWrapper
|
||||
from .i_agent_event_queue import IAgentEventQueue
|
||||
from .pypubsub_agent_event_queue import PyPubSubAgentEventQueue
|
||||
from .locking_agent_event_queue_decorator import LockingAgentEventQueueDecorator
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
from threading import Lock
|
||||
from typing import Type
|
||||
|
||||
from common.agent_events import AbstractAgentEvent
|
||||
|
||||
from . import AgentEventSubscriber, IAgentEventQueue
|
||||
|
||||
|
||||
class LockingAgentEventQueueDecorator(IAgentEventQueue):
|
||||
"""
|
||||
Makes an IAgentEventQueue thread-safe by locking publish()
|
||||
"""
|
||||
|
||||
def __init__(self, agent_event_queue: IAgentEventQueue):
|
||||
self._lock = Lock()
|
||||
self._agent_event_queue = agent_event_queue
|
||||
|
||||
def subscribe_all_events(self, subscriber: AgentEventSubscriber):
|
||||
self._agent_event_queue.subscribe_all_events(subscriber)
|
||||
|
||||
def subscribe_type(
|
||||
self, event_type: Type[AbstractAgentEvent], subscriber: AgentEventSubscriber
|
||||
):
|
||||
self._agent_event_queue.subscribe_type(event_type, subscriber)
|
||||
|
||||
def subscribe_tag(self, tag: str, subscriber: AgentEventSubscriber):
|
||||
self._agent_event_queue.subscribe_tag(tag, subscriber)
|
||||
|
||||
def publish(self, event: AbstractAgentEvent):
|
||||
with self._lock:
|
||||
self._agent_event_queue.publish(event)
|
Loading…
Reference in New Issue