Fast Pub Sub (2 серии деталей)
Краткое объяснение
Во -первых, перед началом кодирования. Вы должны читать это Хорошая статья, которая объясняет разницу между подпиской публикации и наблюдателем. Если вы не хотите читать эту статью, я думаю, что этой графики будет достаточно
Как мы видим в этом графике, к событию будет подключен подписчик (функция обратного вызова). После завершения этого шага издатель добавит в канал события новое событие, запускающее все подписчики, прикрепленные к этому событию.
Наш класс
class EventChannel(object): def __init__(self): self.subscribers = {} def unsubscribe(self, event, callback): if event is not None or event != ""\ and event in self.subscribers.keys(): self.subscribers[event] = list( filter( lambda x: x is not callback, self.subscribers[event] ) ) def subscribe(self, event, callback): if not callable(callback): raise ValueError("callback must be callable") if event is None or event == "": raise ValueError("Event cant be empty") if event not in self.subscribers.keys(): self.subscribers[event] = [callback] else: self.subscribers[event].append(callback) def publish(self, event, args): if event in self.subscribers.keys(): for callback in self.subscribers[event]: callback(args)
Тестирование
event_channel = EventChannel() callback = lambda x: print(x) event_channel.subscribe("myevent", callback) event_channel.publish("myevent", "Hello, world!") # out: "Hello, world!" event_channel.unsubscribe("myevent", callback) bus_instance.publish("myevent", "Hello, world!") # No output
Ссылки
Что вы улучшите?
Fast Pub Sub (2 серии деталей)
Оригинал: “https://dev.to/mandrewcito/lazy-pub-sub-python-implementation-3fi8”