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\r\n"#正常浏览器\r\n代表的是换行
    response += "\r\n"
    #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地址
个人公众号:
在这里插入图片描述

posted @ 2019-08-23 13:16  BothSavage  阅读(324)  评论(0编辑  收藏  举报