2015-05-25 67 views
0

我做简单的GUI聊天程序从服务器调用回调函数蟒蛇更新客户端的GUI控件

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->服务器和服务器只更新A的GUI部件。 B的回调被阻塞,直到B发送消息给服务器。我希望客户端的GUI更新调用立即像interupt呼叫

我该怎么做?

回答

1

只需添加一行

rpyc.BgServingThread(service)#service is rpyc connection