python 创建线程池

2022-06-07  本文已影响0人  孙广宁
12.7 创建线程池来处理用户客户端链接
from socket import AF_INET,SOCK_STREAM,socket
from concurrent.futures import ThreadPoolExecutor

def echo_client(sock,client_addr):
    print('got connection from',client_addr)
    while True:
        msg = sock.recv(65536)
        if not msg:
            break
        sock.sendall(msg)
    print('client closed')
    sock.close()

def echo_server(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(('',5000))
from socket import AF_INET,SOCK_STREAM,socket
from concurrent.futures import ThreadPoolExecutor
from threading import Thread
from queue import Queue

def echo_client(q):
    sock,client_addr = q.get()
    print('got connection from',client_addr)
    while True:
        msg = sock.recv(65536)
        if not msg:
            break
        sock.sendall(msg)
    print('client closed')
    sock.close()

def echo_server(addr,nworkers):
    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(('',5000),120)
上一篇 下一篇

猜你喜欢

热点阅读