Обновить виджет 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