zoukankan      html  css  js  c++  java
  • python 并发编程 基于线程池实现并发的套接字通信

    不应该让服务端随着 并发的客户端数量增多,而无数起线程,应该用线程池,限制线程数量,控制最大并发数

    io密集型程序,最大并发数是2

    客户端

    from socket import *
    
    client = socket(AF_INET, SOCK_STREAM)
    client.connect(('127.0.0.1', 8080))
    
    while True:
        msg = input(">>>:").strip()
        if not msg:break
        client.send(msg.encode("utf-8"))
        data = client.recv(1024)
        print(data.decode("utf-8"))
    
    client.close()

    服务端

    from socket import *
    from concurrent.futures import ThreadPoolExecutor
    
    def communicate(conn):
        ''' 通信功能 '''
        while True:
            try:
                data = conn.recv(1024)
                if not data:break
                conn.send(data.upper())
    
            except ConnectionResetError:
                break
    
        conn.close()
    
    def server(ip,port):
        ''' 负责建立连接 accept'''
    
        server = socket(AF_INET, SOCK_STREAM)
        server.bind((ip,port))
        server.listen(5)
    
        while True:
            conn,addr = server.accept()
            pool.submit(communicate,conn)
    
    
        server.close()
    
    
    if __name__ == "__main__":
        pool = ThreadPoolExecutor(2)
        server('127.0.0.1', 8080)
  • 相关阅读:
    希尔排序例子
    C
    重构最大堆的例子
    基于堆的优先队列和用优先队列排序的例子
    堆排序例子
    分治法示例
    三路划分的快速排序算法
    二叉搜索例子
    标准快速排序
    【转载】JAVA5新特性
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/11144804.html
Copyright © 2011-2022 走看看