Python асинхронная связь между классами - PullRequest
0 голосов
/ 24 июня 2018

Я реализовал класс, который подключается к веб-сокету для получения асинхронных сообщений.

class websocketClient(...):
    def on_message(self, msg):  # Gets automatically called
        notifyBrokerAbout(msg)  # How to proceed from here?

class Broker():
    self.websocket = websocketClient(...)
    self.websocket.start()

    def heartbeat(self):
        return self.websocket 

Функция сердцебиения запускает веб-сокет и возвращает его. Сам класс websocket имеет функцию on_message(), которая действует как обратный вызов, который срабатывает при каждом получении нового сообщения.

Я не хочу время от времени вызывать функцию для GET самого последнего msg из веб-сокета для брокера, вместо этого я хочу PUSH эти сообщения брокеру, как только они поступят в on_message().

broker = Broker()
hearbeats = broker.heartbeat()

for beat in heartbeats:
    ...

enter image description here

Как я могу решить это лучше всего в Python? Я ищу способ отправить новое сообщение, приходящее с websocketClient s on_message() на heartbeat(), чтобы в основном приложении я мог подписаться на эту функцию и ждать обновлений.

1 Ответ

0 голосов
/ 24 июня 2018

Эту проблему можно решить, используя схему реактора - асинхронную обработку запросов с последующей синхронной отправкой.

Вы найдете много хороших примеров, выполнив поиск по запросу «реактор Гевент» и «реактор витой».Есть несколько вариантов.Я не буду рекомендовать конкретный вариант, поскольку общий выбор будет зависеть от других проблем системного уровня, которые не видны в вашем примере кода.

...