zoukankan      html  css  js  c++  java
  • python_day9 进程池

    通过进程池 实现 socket

    from multiprocessing import Process,Pool
    import os,sys
    from socket import *
    import time
    server=socket(AF_INET,SOCK_STREAM)
    server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    server.bind(('127.0.0.1',80))
    server.listen(5)


    def go(conn,addr):
    while True:
    try:
    P=os.getpid()
    data = conn.recv(1024)
    print(P)
    # conn.send(P)
    except Exception as e:
    print(e)
    break


    if __name__ == '__main__':
    pool=Pool()
    r_l=[]
    while True:
    conn,addr =server.accept()
    res=pool.apply_async(go,args=(conn,addr))
    r_l.append(res)

    默认情况下 进程池中可以启动的进程数 是 CPU 的核数,我这里是4核
    所以我用5个进程 测试, 当第5个客户端 试图 链接服务器的时候 现象是 等待服务器 返回;
    实际上服务器是在处理前4个的请求, 当第一个的请求断掉了, 第5个连上了;
    当这个时候, 第一个客户端 连上的 和 第5个客户端连上的 在服务器端 是同一个进程 处理的,也就是 同一个PID



  • 相关阅读:
    Unity3D屠龙战机项目总结
    10.2 MySQL数据库安装
    10.1 JDBC基础
    9.5 异常处理规则
    9.4 Java的异常跟踪栈
    9.3 使用throw抛出异常
    9.2 Checked异常和Runtime异常
    9.1 异常处理机制
    8.5 泛型和数组
    8.5 擦除和转换
  • 原文地址:https://www.cnblogs.com/onda/p/7083812.html
Copyright © 2011-2022 走看看