Python套接字导致调用accept的次数过多

Python套接字导致调用accept的次数过多,python,multithreading,sockets,http,webserver,Python,Multithreading,Sockets,Http,Webserver,我正在尝试用Python编写一个简单的多线程web服务器。 当一个新的客户端套接字与服务器套接字连接时,我会创建一个新线程来处理客户端套接字,如下所示: (clientsock, (ip, port)) = self.sock.accept() newthread = ClientThread(ip, port, clientsock) newthread.start() 其中ClientThread类有一个run方法,该方法依次调用以下代码位: data_string = ''

我正在尝试用Python编写一个简单的多线程web服务器。 当一个新的客户端套接字与服务器套接字连接时,我会创建一个新线程来处理客户端套接字,如下所示:

(clientsock, (ip, port)) = self.sock.accept()
newthread = ClientThread(ip, port, clientsock)
newthread.start()
其中ClientThread类有一个run方法,该方法依次调用以下代码位:

    data_string = ''
    bytes = self.socket.recv(2046)
    bytes_str = bytes.decode('UTF-8')
    data_string += bytes_str
其中self.socket是上面引用的clientsock

此代码按预期工作:当服务器套接字接受来自客户端套接字的连接并接收客户端套接字请求时,将创建1个线程

但如果我更改上述代码以便在有更多数据时循环,例如:

    data_string = ''
    bytes = self.socket.recv(2046)
    while len(bytes) > 0:
        bytes_str = bytes.decode('UTF-8')
        data_string += bytes_str
        print 'data received: %s' % (bytes_str)
        bytes = self.socket.recv(2046)
然后我有一个奇怪的问题。似乎多次调用accept,因此每次都会创建一个新的、不必要的线程

即-如果启动客户端并尝试访问文件,则从服务器获得以下输出:

如果只有一个客户端连接到服务器,为什么要多次调用accept

编辑 这是预期的行为吗

We have accepted a connection from (127.0.0.1, 59983)
New thread started for (127.0.0.1, 59983)
We have accepted a connection from (127.0.0.1, 59984)
New thread started for (127.0.0.1, 59984)