协程学习总结

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

5.协程的TCPServer(并发)
8. 集成模块完成多进程,多线程socket并发

  1. 模块
    1. python2 : SocketServer
    2. python3 : socketserver
  2. 功能
    通过模块提供的不同类的组合,完成多进程或者多线程并发
  3. 常用类
    ‘StreamRequestHandler’,
    ‘DatagramRequestHandler’,
'TCPServer',
'UDPServer',

'ForkingMixIn',
'ForkingTCPServer',
'ForkingUDPServer',

'ThreadingMixIn',
'ThreadingTCPServer',
'ThreadingUDPServer',

猜你喜欢

转载自blog.csdn.net/weixin_43760712/article/details/86588719
今日推荐