2015-05-25 105 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