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