zoukankan      html  css  js  c++  java
  • Web服务器-并发服务器-多进程(3.4.1)

    @

    1.优化分析

    在单进程的时候,相当于
    是来一个客户,派一个人去服务一下
    效率低,现在使用多进程来服务
    假设场景 100个人同时访问页面
    单进程:一次处理,后面的会等待时间长
    多进程:并发处理,一起处理
    当然进程不能越多越好,硬件不支持
    线程的开销比进程少,但最好使用协程

    注意
    用process来创建子进程的时候,子进程会复制主进程的资源
    全局变量和局部变量都会复制

    2.代码

    from socket import *
    import  re
    import  multiprocessing
    def service_client(new_socket):
        '''为这个客户端返回数据'''
    
        # 1.接收浏览器发送过来的请求,即http请求
        #GET /HTTP/1.1
        # ...
        request = new_socket.recv(1024).decode("utf-8")
        request_lines = request.splitlines()
        print(request_lines)
    
        #GET /index.html HTTP/1.1
        #get post put del
        ret = re.match(r"[^/]+/[^ ]*",request_lines[0])
        file_name = ""
        if ret:
            file_name = ret.group(0)
    
        #2,返回http格式的数据给浏览器
        #2.1准备发送给浏览器的数据 ---header
        response = "HTTP/1.1 200 OK
    "#正常浏览器
    代表的是换行
        response += "
    "
        #2.2准备发送给浏览器的数据
        response =  response + file_name
        new_socket.send(response.encode("utf-8"))
    
        #3.关闭套接字
        new_socket.close()
    
    
    def main():
        '''用来完成整体的控制'''
        #1.创建套接字
        tcp_server_socket = socket(AF_INET, SOCK_STREAM)
    
        # 2.绑定本地信息
        port = 7777
        address = ('', port)
        tcp_server_socket.bind(address)
    
        # 3.变为监听,将主动套接字变为被动套接字
        tcp_server_socket.listen(128)
    
        #等待连接
        while True:
            client_socket, clientAddr = tcp_server_socket.accept()
    
            #多进程处理
            p = multiprocessing.Process(target=service_client,args=(client_socket,))
            p.start()
    
            client_socket.close()
    
        # 关闭监听套接字
        tcp_server_socket.close()
    
    
    if __name__ == "__main__":
        main()
    
    

    3.

    关于作者

    个人博客网站
    个人GitHub地址
    个人公众号:
    在这里插入图片描述

  • 相关阅读:
    学习笔记
    display:inline、block、inline-block的区别
    响应式布局设计
    CSS中position属性三大定位方式讲解
    CSS position 属性 一定要有width
    JQuery中each()怎么跳出
    JSON 学习笔记
    【转】30个你不可不知的CSS选择器
    HTML文档类型的作用,文档类型有多少种?
    jQuery中children()与find()的区别
  • 原文地址:https://www.cnblogs.com/simon-idea/p/11399412.html
Copyright © 2011-2022 走看看