Обновить виджет GUI клиента с Сервера с помощью виджета RFC

Я делаю простую программу чата с графическим интерфейсом Python

из функции обратного вызова сервера:

def broadcast(self, msg):
    with lock:
        print("bloadcast calls")
        global callbacks
        global buf
        for user, callback in callbacks.items():
            if user not in buf or buf[user] == None:
                buf[user] = (msg,)
            else:
                buf[user] = buf[user] + (msg,)
            callback()

функция обратного вызова испускает сигнал клиента

service.root.accept(idt, chat.update.update.emit)

В функции принятия сервера

callbacks[idt] = rpyc.async(callback)

это оно

class Updater(QObject):
    update = pyqtSignal()

В моем классе клиента

self.update = Updater()
self.update.update.connect(self.listen)

и метод прослушивания

def listen(self):
    msg = self.service.root.get_buf(self.idt)//get server's message by call server's function
    for m in msg:
        self.log.append(m)

так что функция обратного вызова сервера и сделать сигнал в клиенте, который обновляет виджет GUI

когда есть один клиент, он работает хорошо. но когда имеется более одного клиента, например, клиент A и клиент B, A -message-> сервер и сервер обновляют только виджет GUI A. И обратный вызов B заблокирован, пока B не отправит сообщение на сервер. Я хочу, чтобы вызов клиента обновления GUI немедленно, как вызов Interupt

Как я могу это сделать?

1 ответ

Решение

Просто добавьте одну строку

rpyc.BgServingThread(service)#service is rpyc connection
Другие вопросы по тегам