使用threading&queue:
from socket import socket, AF_INET, SOCK_STREAM from threading import Thread from queue import Queue def echo_server(addr, nworkers): print('Echo server running at', addr) # 启动客户工人 q = Queue() for n in range(nworkers): t = Thread(target=echo_client, args=(q,)) t.daemon= True t.start() # 运行服务器 sock = socket(AF_INET, SOCK_STREAM) sock.bind(addr) sock.listen(5) while True: client_sock, client_addr = sock.accept() q.put((client_sock, client_addr)) echo_server(('',15000), 128)
使用concurrent.futures.Threadpoolexecutor:
from socket import AF_INET, SOCK_STREAM, socket fromconcurrent.futuresimport ThreadPoolExecutor def echo_server(addr): print('Echo server running at', addr) pool = ThreadPoolExecutor(128) sock = socket(AF_INET, SOCK_STREAM) sock.bind(addr) sock.listen(5) while True: client_sock, client_addr = sock.accept() pool.submit(echo_client, client_sock, client_addr) echo_server(('',15000))
David Beazley和Brian K.Jones(O'Reilly)撰写的Python Cookbook,第3版。版权所有2013 David Beazley和Brian Jones,978-1-449-34037-7。