Python 3.x 线程化TCP处理程序

Python 3.x 线程化TCP处理程序,python-3.x,multithreading,sockets,Python 3.x,Multithreading,Sockets,上面的代码直接来自 我的问题是,当使用线程时,在服务器关闭之前,线程似乎不会关闭。是这样吗?如果是,那么在所有线程都打开的情况下,这是否会导致内存问题(因为服务器大部分时间都需要运行)?或者,代码中没有显示关闭线程的另一部分?套接字关闭,当handle返回时,线程死亡。 import socket import threading import socketserver class ThreadedTCPRequestHandler(socketserver.BaseRequestHandle

上面的代码直接来自


我的问题是,当使用线程时,在服务器关闭之前,线程似乎不会关闭。是这样吗?如果是,那么在所有线程都打开的情况下,这是否会导致内存问题(因为服务器大部分时间都需要运行)?或者,代码中没有显示关闭线程的另一部分?

套接字关闭,当
handle
返回时,线程死亡。
import socket
import threading
import socketserver

class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):

def handle(self):
    data = str(self.request.recv(1024), 'ascii')
    cur_thread = threading.current_thread()
    response = bytes("{}: {}".format(cur_thread.name, data), 'ascii')
    self.request.sendall(response)

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

def client(ip, port, message):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        sock.connect((ip, port))
        sock.sendall(bytes(message, 'ascii'))
        response = str(sock.recv(1024), 'ascii')
        print("Received: {}".format(response))

if __name__ == "__main__":
 # Port 0 means to select an arbitrary unused port
 HOST, PORT = "localhost", 0

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
with server:
    ip, port = server.server_address



    # Start a thread with the server -- that thread will then start one
    # more thread for each request
    server_thread = threading.Thread(target=server.serve_forever)
    # Exit the server thread when the main thread terminates
    server_thread.daemon = True
    server_thread.start()
    print("Server loop running in thread:", server_thread.name)

    client(ip, port, "Hello World 1")
    client(ip, port, "Hello World 2")
    client(ip, port, "Hello World 3")

    server.shutdown()


Output
$ python ThreadedTCPServer.py
Server loop running in thread: Thread-1
Received: Thread-2: Hello World 1
Received: Thread-3: Hello World 2
Received: Thread-4: Hello World 3