2014-10-07 36 views
0

我想調用一個服務器的句柄函數內的方法來執行它作爲一個新的線程。我想通過作爲參數的要求,具體如下:錯誤的文件描述符python服務器

class serviceData(SocketServer.BaseRequestHandler): 

    def handle(self): 

     def dataTransfer(req): 
      data = 'dummy' 

      while len(data):    
        #data = self.request.recv(1024) 
        data = req.recv(1024) 
        print str(data) 

        result = 'hi' 


        req.sendall(str(result))    

      print "Client exited" 
      req.close() 


     try: 
      print "Client connected with ", self.client_address 
      thread.start_new_thread(dataTransfer, (self.request,)) 
     except Exception, e: 
      print e 
      print "Error: unable to start thread" 

我得到以下錯誤:

data = req.recv(1024) 
File "usr/lib/python2.7/socket.py" line 170, in dummy 
    raise error(EBADF, 'Bad file descriptor') 
socket.error: [Errno 9] Bad file descriptor 

任何人都知道我在做什麼不好?

回答

1

我找到了解決方案。使用ThreadedTCPServer混合套接字服務器和線程。所以:

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): 
    pass 

server = ThreadedTCPServer(('', 1520), service) 
server.serve_forever() 

這樣,def handle(self): ...... 創建爲每個新連接一個新的線程。

相關問題