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

有人知道我做了什么坏事吗?

我找到了解决方案。将套接字服务器和线程与ThreadedTCPServer混合使用。因此:

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass
server = ThreadedTCPServer( ('', 1520), service )
server.serve_forever()

这样一来,def handle(self): ......为每个新连接创建一个新线程。

最新更新