@

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地址

个人公众号:

Web服务器-并发服务器-多进程(3.4.1)的更多相关文章

  1. web服务器-并发服务器2

    阅读目录 1.Web静态服务器-5-非堵塞模式 2.Web静态服务器-6-epoll 3.Web静态服务器-7-gevent版 4.知识扩展-C10K问题 一.Web静态服务器-5-非堵塞模式 单进程 ...

  2. Python复习笔记(十)Http协议--Web服务器-并发服务器

    1. HTTP协议(超文本传输协议) 浏览器===>服务器发送的请求格式如下:(浏览器告诉服务器,浏览器的信息) GET / HTTP/1.1 Host: www.baidu.com Conne ...

  3. 14_Web服务器-并发服务器

    1.服务器概述 1.硬件服务器(IBM,HP): 主机 集群 2.软件服务器(HTTPserver Django flask): 网络服务器,在后端提供网络功能逻辑处理数据处理的程序或者架构等 3.服 ...

  4. Web服务器-并发服务器-Epoll(3.4.5)

    @ 目录 1.介绍 2.代码 关于作者 1.介绍 epoll是一种解决方案,nginx就是用的这个 中心思想:不要再使用多进程,多线程了,使用单进程,单线程去实现并发 在上面博客实现的代码中使用过的轮 ...

  5. Web服务器-并发服务器-协程 (3.4.2)

    @ 目录 1.分析 2.代码 关于作者 1.分析 随着网站的用户量越来愈多,通过多进程多线程的会力不从心 使用协程可以缓解这一问题 只要使用gevent实现 2.代码 from socket impo ...

  6. Web服务器-并发服务器-长连接(3.4.4)

    @ 目录 1.说明 2.代码 关于作者 1.说明 每次new_socket都被强制关闭,造成短连接 所提不要关闭套接字 但是不关闭的话,浏览器不知道发完没有啊 此时用到header的属性Content ...

  7. Web服务器-并发服务器-单进程单线程非堵塞方式(3.4.3)

    @ 目录 1.分析 2.代码 关于作者 1.分析 当socket去监听的时候,是堵塞的状态 通过tcp_sever_socket.setblocking(False)去设置不堵塞 当socket发现没 ...

  8. linux学习之多高并发服务器篇(一)

    高并发服务器 高并发服务器 并发服务器开发 1.多进程并发服务器 使用多进程并发服务器时要考虑以下几点: 父最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符) 系统内创建进程 ...

  9. 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...

随机推荐

  1. 轻松学编曲,论FL钢琴卷帘

    我们平时做视频时难免要用到音乐,市面上又有很多调音编曲软件,我们该如何选择呢?在这里笔者给大家推荐一款音乐制作软件FL Studio20,也就是业内知名度很高的水果音乐制作软件,这款音乐制作软件笔者用 ...

  2. SpringBoot---WebMvcConfigurer详解

    1. 简介 2. WebMvcConfigurer接口 2.1 addInterceptors:拦截器 2.2 addViewControllers:页面跳转 2.3 addResourceHandl ...

  3. Jmeter如何监测被测服务器资源

    前言 Jmeter自身不支持对服务器的监控,需要安装第三方插件进行扩展. 下载插件 jmeter添加插件步骤,选项-PluginManager 勾选上PerfMon选项,点击右下角的Apply-按钮 ...

  4. 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..

    大家好,我是柠檬. 柠檬哥作为一个普通大学.非计算机专业,自学后端技术进入腾讯做后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听柠檬哥转行之路经历的吗,可以留言告诉我,人多就写写),体 ...

  5. 精尽MyBatis源码分析 - 文章导读

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  6. 1.Cobaltstrike 安装与简介

    1.Cobaltstrike 安装与简介 一.简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人内称为CS.自去年起, Cobaltstrike升级到3.0版本, ...

  7. CentOS 7下使用systemctl为Nginx启用进程守护实现开机自启

    1.cd到指定目录 cd /usr/lib/systemd/system 2.创建nginx.service vi nginx.service 3.输入以下内容,路径为nginx安装路径 [Unit] ...

  8. oracle sql%notfound

    SQL%NOTFOUND 是一个布尔值.与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true.否则返回fal ...

  9. Linux之【GNU】、【GPL】、【linux系统组成】

    GNU,什么是GNU GNU全称:GNU's not unix GNU的重要组件(Emacs,gcc,bash,gawk等)加上自己的内核构成了GNU自己的系统--->没用 现在linux中的一 ...

  10. PyQt(Python+Qt)学习随笔:窗口对象尺寸调整相关的函数resize、showMaximized、showNormal、showMinimized

    resize(width,height) resize可以直接调整窗口的尺寸,调整效果类似于鼠标直接拉伸或缩小窗口,但窗口大小的最大值.最小值受窗口的sizePolicy.sizeHint.minim ...