Skr-Eric的网络编程课堂(十一)-- 多线程并发和协程

多线程并发

 

threading 的多线程并发

 

对比多进程并发:

    * 消耗资源较少

    * 线程应该更注意共享资源的操作

    * 在python中应该注意GIL问题,网络延迟较高,线程并发也是一种可行的办法

 

实现步骤

    1. 创建套接字,绑定监听

    2. 接收客户端请求,创建新的线程

    3. 主线程继续接收其他客户端连接

    4. 分支线程启动对应的函数处理客户端请求

    5. 当客户端断开,则分支线程结束

 

cookie

 

import traceback

 

traceback.print_exc()

功能 : 更详细的打印异常信息

 

集成模块的使用

 

python2 SocketServer

python3 socketserver

 

功能 : 通过模块的不同类的组合完成多进程/多线程的tcp/udp的并发

 

StreamRequestHandler  处理tcp套接字请求

DatagramRequestHandler  处理udp套接字请求

 

TCPServer  创建tcp server

UDPServer  创建udp server

 

ForkingMixIn   创建多进程

ForkingTCPServer -->  ForkingMinIn + TCPServer

ForkingUDPServer -->  ForkingMinIn + UDPServer

 

ThreadingMixIn  创建多线程

ThreadingTCPServer --> ThreadingMinIn + TCPServer

ThreadingUDPServer --> ThreadingMinIn + UDPServer

 

HTTPServer  V2.0

 

1. 接收客户端请求

2. 解析客户端请求

3. 组织数据,形成HTTP response

4. 将数据发送给客户端

 

升级

1. 采用多线程并发接收多个客户端请求

2. 基本的请求解析,根据请求返回相应的内容

3. 除了可以请求静态网页,也可以请求简单的数据

4. 将功能封装在一个类中

 

技术点 :

1. socket  tcp 套接字

2. http协议的请求响应格式

3. 线程并发的创建方法

4. 类的基本使用

 

协程基础

 

定义 : 纤程,微线程。协程的本质是一个单线程程序,所以协程不能够使用计算机多核资源。

作用 : 能够高效的完成并发任务, 占用较少的资源。因此协程的并发量较高

原理 : 通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率。

 

优点 : 消耗资源少

        无需切换开销

无需同步互斥

IO并发性好

 

缺点 : 无法利用计算机多核

yield ---》 协程实现的基本关键字

 

greenlet

 

greenlet.greenlet()  生成协程对象

gr.switch() 选择要执行的协程事件

 

gevent

 

1. 将协程事件封装为函数

2. 生成协程对象

  gevent.spawn(func,argv)

  功能 : 生成协程对象

  参数 : func  协程函数

          argv  给协程函数传参

  返回值 : 返回协程对象

 

3.回收协程

  gevent.joinall()

  功能 : 回收协程

  参数: 列表 将要回收的协程放入列表

 

 gevent.sleep(n)

 功能: 设置协程阻塞,让协程跳转

 参数: n  阻塞时间

 

from gevent import monkey

monkey.patch_all()

功能: 修改套接字的IO阻塞行为

* 必须在socket导入之前使用

 

 

 

 

 

想要看更多的课程请微信关注SkrEric的编程课堂

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值