Python创建工作池
示例
使用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))
DavidBeazley和BrianK.Jones(O'Reilly)撰写的PythonCookbook,第3版。版权所有2013DavidBeazley和BrianJones,978-1-449-34037-7。