zoukankan      html  css  js  c++  java
  • 进程池和线程池

    进程池

    就是一个装进程的池子

    为什么出现进程池

    当进程很多时候方便管理进程

    什么时候用

    当并发量特别大的时候,列入双十一

    很多时候进程是空闲的,就让他进入进程池,让有任务处理时才从进程池取出来使用。

    进程池的使用

    ProcessPoolExecutor类
    创建时指定最大进程数 自动创建进程
    调用submit函数将任务提交到进程池中
    创建进程是在调用submit后发生的

    总结

    进程池可以自动创建进程
    进程限制最大进程数
    自动选择一个空闲的进程帮你处理任务
    from concurrent.futures import ProcessPoolExecutor
    #导入进程池
    import socket
    
    def task(client):
        while True:
            try:
                data = client.recv(1024)
                print(data.decode("utf-8"))
                if not data:
                    client.close()
                    break
                client.send(data.upper())
            except Exception:
                print("客户端断开")
                client.close()
                break
    
    if __name__ == '__main__':
        server = socket.socket()
        server.bind(("127.0.0.1",3555))
        server.listen(5)
        #创建进程池默认个数为cpu的核心数
        pool = ProcessPoolExecutor()
        while True:
            client,addr = server.accept()
            pool.submit(task,client)

    客户端

    import socket
    
    client = socket.socket()
    client.connect(("127.0.0.1",3555))
    while True:
        msg = input(">>>")
        client.send(msg.encode("utf-8"))
        data = client.recv(1024)
        print(data.decode("utf-8"))

    线程池使用方法基本相同(线程数限制为当前cpu核心数的5倍 20线程)

    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    #导入进程池
    import socket
    
    def task(client):
        while True:
            try:
                data = client.recv(1024)
                print(data.decode("utf-8"))
                if not data:
                    client.close()
                    break
                client.send(data.upper())
            except Exception:
                print("客户端断开")
                client.close()
                break
    
    if __name__ == '__main__':
        server = socket.socket()
        server.bind(("127.0.0.1",3555))
        server.listen(5)
        #创建进程池默认个数为cpu的核心数
        # pool = ProcessPoolExecutor()
        #创建线程池默认个数为cpu核心的5倍
        pool = ThreadPoolExecutor()
        while True:
            client,addr = server.accept()
            pool.submit(task,client)
     
  • 相关阅读:
    PreferenceScreen 偏好显示类 的使用
    Android实战技巧:如何在ScrollView中嵌套ListView
    android onActivityResult不执行问题
    java zip解压中文乱码问题
    RandomAccessFile读取大文件时效率很低,现进行改进---BufferedRandomAccessFile
    HTTP RANGE(多线程下载相关)
    Android实现ListView异步加载图片
    自己调用webservice方法总结(带请求头SoapHeader)
    Android将程序崩溃信息保存本地文件
    Android的intent之间复杂参数的传递
  • 原文地址:https://www.cnblogs.com/msj513/p/9948148.html
Copyright © 2011-2022 走看看