Рубрики
Без рубрики

Fast Pub-Sub Python Реализация: начало (i)

Мини -пример быстрой субпроекты в пабе. Tagged with Publish, подписка, Python, пример.

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”