前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发篇-python协程-1

并发篇-python协程-1

作者头像
小团子
发布2019-07-18 11:00:37
3850
发布2019-07-18 11:00:37
举报
文章被收录于专栏:数据云团数据云团

greenlet 是底层实现了原生协程的 C扩展库。

gevent实现协程

基于 epoll 的回调式编程模式,但是却难以使用。即使可以通过配合 生成器协程 进行复杂的封装,以简化编程难度。

但是仍然有一个大的问题: 封装难度大,现有代码几乎完全要重写gevent,通过封装了 libev(基于epoll) 和 greenlet 两个库。做好封装,允许以类似于线程的方式使用协程。

>>>gevent 并发服务器

# 将 Python 内置的 socket 直接换成封装了 IO 多路复用的 socket

>>>from gevent import monkey; monkey.patch_socket()

# 工作协程的内容

>>>def worker_coroutine(conn):

# 生成一个协程,并将 conn 作为参数传入

>>>gevent.spawn(worker_coroutine, conn)

遇到阻塞就切换到另一个协程继续执行 !

  • 使用基于 epoll 的 libev 来避开阻塞
  • 使用基于 gevent 的 高效协程 来切换执行
  • 只在遇到阻塞的时候切换,没有轮询的开销,也没有线程的开销

Gevent 是一个第三方库,可以轻松通过gevent实现协程程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。

gevent会主动识别程序内部的IO操作,当子程序遇到IO后,切换到别的子程序。如果所有的子程序都进入IO,则阻塞。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档