2010-12-20 50 views
0

我實際上使用pyopengl程序充當套接字服務器。同時 服務器接收來自客戶端的命令並解釋這些命令並同時進行相應的繪圖。pyopengl顯示同時充當套接字服務器時被阻塞

如果主線程在執行套接字事件時被阻塞,我實際上啓動了一個線程來執行套接字服務器接受事件,並在顯示循環中調用updateserver套接字方法。

class SocketServer(Thread): 
def __init__ (self): 
    Thread.__init__(self) 
    self.serversocket = socket(AF_INET, SOCK_STREAM); 
    self.serversocket.bind(("127.0.0.1", 7780)); 
    self.status = -1;#not connected 
    self.clientsocket   = None; 
    self.clientaddress  = None; 
    self.clientbuffer   = None; 
    self.serversocket.listen(5); 
def run(self): 
    print 'thread running' 
    while(self.status == -1): 
     time.sleep(10); 
     (self.clientsocket, self.clientaddress) = self.serversocket.accept(); 
     self.clientbuffer = self.clientsocket.makefile('r',0); 
     self.status = 0; 
    #Thread.kill(); 
    #print 'SERVER LISTENNING FINISHED'; 

def getClientContent(self): 
    if (not self.clientbuffer): return "NONE CLIENT BUFFER"; 
    return self.clientbuffer.readline(); 

ss = SocketServer(); 

def updateServerSocket(): 
    global ss; 
    print ss.getClientContent(); 
  1. 我不知道如何來終止線程
  2. 一次寫在另一個Python文件中的客戶端開始推數據,顯示循環獲得掛斷,如果它死了

回答

0

getClientContent中,行self.clientbuffer.readline();正在對套接字進行阻塞調用,這幾乎可以肯定是什麼導致你的麻煩。

你需要做的是你的run方法執行readlines並將數據粘貼到隊列中,然後圖形顯示線程從中讀取隊列。

相關問題