- 协程
- 定义
纤程,微线程,是为非抢占式多任务产生子程序的计算机程序组件 - 特点
- 协程允许在不同的位置暂停或者开始执行,简单来说,协程就是可以暂停执行的函数
- yield是实现协程的基本关键字(生成器就是协程的基本体现)
- 原理
- 记录一个函数栈的上下文,进行协程的切换调度,当一个函数暂停执行时,会将上下文栈帧保存起来
- 优点
- 可执行多任务
- 本质是单线程,资源消耗小
- 协程无需切换的开销,无需同步互斥(无需内核切换,只是应用层的切换)
- 缺点
无法利用计算机多核资源 - 协程模块
- 第三方模块 : greenlet gevent
- 安装
sudo pip3 install greenlet
sudo pip3 install gevent - greenlet模块方法
- g = greenlet.greenlet(func)
功能 : 创建协程对象
参数 : 协程函数 - g.switch()
功能 : 启动协程函数 - gevent模块
- gevent.spawn(func,argv)
- 功能 : 生成协程对象
- 参数 : func协程函数,argv传参
- 特点 : 当func中遇到gevent类型阻塞会跳出
## 并不是所有类型的阻塞都会跳出
- gevent.joinall(List,[timeout])
- 功能 : 启动并阻塞等待回收协程
- 参数 : List为协程对象列表,timeout为超时时间
- gevent.sleep(sec)
- 功能 : 提供协程阻塞
- from gevent import monkey
monkey.patch_all()
功能 : 修改原有IO阻塞行为,触发协程事件跳转
特点 : 必须在导入要使用的模块前设置
5.协程的TCPServer(并发)
8. 集成模块完成多进程,多线程socket并发
- 模块
- python2 : SocketServer
- python3 : socketserver
- 功能
通过模块提供的不同类的组合,完成多进程或者多线程并发 - 常用类
‘StreamRequestHandler’,
‘DatagramRequestHandler’,
'TCPServer',
'UDPServer',
'ForkingMixIn',
'ForkingTCPServer',
'ForkingUDPServer',
'ThreadingMixIn',
'ThreadingTCPServer',
'ThreadingUDPServer',