- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
玩转Openstack之Nova中的协同并发
玩转Openstack之Nova中的协同并发
前不久参加了个Opnstack的Meetup,其中有一个来自EasyStack的大大就Nova中的协同并发做了一番讲解,有所感触,本想当天就总结一下,但是由于前段时间工作上比较忙,加上为了履行诺言每天几更的来写设计模式系列性文章,故而拖到今天才写此次的总结。好吧,其实归根结底还是自己太懒了,趁着闲时在补新番小笼包之类的。废话就此打住,开始正文。
Python中协程的介绍
在此之前,先介绍下Python中的并发,在Python中,并发有三种,分别是:
进程:Python中一般使用multiprocessing/subprocess来实现
线程:threading/thread是Python中用来实现多线程的模块
协程(Coroutines):Python中用于处理协程的模块倒是比较多,有eventlet、Twisted、Tulip、asyncio
有关进程、协程、线程中的关系图如下所示(图来自EasyStack的大大):
想必大家对进程以及线程那是相当的熟悉了,所以就重点介绍下协程:协程源自 Simula 和 Modula-2 语言,但也有其他语言支持。协程更适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器,无限列表和管道。 协程最初在1963年被提出。那么协程又有什么特点呢?
每个协程都有自己的私有stack以及局部变量。
线程我们都知道可以多个同时运行,也就是所谓的多线程,但是同一时间只有一个协程在运行,所以就无须对某些共享变量加锁。
由于协程比较轻量级,所以一个线程中可以有多个协程。
协程之间的执行顺序,完全由程序来控制。
其实协程也就仅仅是一种概念罢了,非操作系统可见,在多种语言中都有实现,一会详细介绍的eventlet就是在Python中实现的一种。
Eventlet的介绍
eventlet其实就是对greenlet的一个封装,对其进行简单的封装之后,就成了所谓的greenthread,greenlet是一个称为协程(coroutine)的东西。下面上一个greenlet的例子来介绍一下greenlet:
1from?greenletimportgreenlet23def?test1:4print?125gr2.switch6print?3478def?test2:9print?5610gr1.switch11print?781213gr1?=greenlet(test1)14gr2?=greenlet(test2)15gr1.switch?
执行结果是:
也就是说在这里先定义了两个函数test1,test2以及两个协程gr1,gr2,最后一行g1.switch跳转到 test1 ,它打印12,然后执行gr2.switch,跳转到 test2 ,打印56,然后又执行了gr1.switch跳转回 test1 ,打印34,然后 test1 就结束,gr1死掉,回到父greenlet,不会再切换到test2,所以不会打印78。在上面的例子中main greenlet就是它们的父 greenlet。
eventlet是一个用来处理和网络相关的python库函数,而且可以通过协程来实现并发,在eventlet里,把“协程”叫做greenthread(绿色线程)。所谓并发,就是开启了多个greenthread,并且对这些greenthread进行管理,以实现非阻塞式的I/O。比如说用eventlet可以很方便的写一个性能很好的web服务器,或者是一个效率很高的网页爬虫,这都归功于eventlet的“绿色线程”,以及对“绿色线程”的管理机制。更让人不可思议的是,eventlet为了实现“绿色线程”,竟然对python的和网络相关的几个标准库函数进行了改写,并且可以以补丁(patch)的方式导入到程序中,因为python的库函数只支持普通的线程,而不支持协程,eventlet称之为“绿化”。Eventlet库在OpenStack服务中上镜率很高,尤其是在服务的多线程和WSGI Server并发处理请求的情况下。
主要API如下:
Greenthread 产?:
spawn(func, *args, **kwargs): 创建一个绿色线程去运行func这个函数,后面的参数是传递给这个函数的参数。返回值是一个eventlet.GreenThread对象,这个对象可以用来接受func函数运行的返回值。在绿色线程池还没有满的情况下,这个绿色线程一被创建就立刻被执行。其实,用这种方法去创建线程也是可以理解的,线程被创建出来,肯定是有一定的任务要去执行,这里直接把函数当作参数传递进去,去执行一定的任务,就好像标准库中的线程用run方法去执行任务一样。
spawn_n(func, *args,
您可能关注的文档
- 王海洋_外文文献实习作业.doc
- 王炜专访中国整形美容不输日韩x.docx
- 王淼琛诗词集(2010之十一).doc
- 王民中学2011年初中毕业.doc
- 王熙凤贾宝玉和林黛玉肖像描写的整体性解读.doc
- 王牌对决二战德国第6伞兵团诺曼底战记.doc
- 王海南对自体脂肪的见解.docx
- 王燕写字13-16课时.doc
- 王献之《洛神赋》和他的“徒子徒孙”.doc
- 王献之小楷《玉版十三行》精析.doc
- 2025年AI大模型技术在电力系统中的应用及发展趋势报告-香港中文大学(赵俊华).docx
- 2025年温室气体核查指南-企业可持续发展的绿色基石-ICAS英格尔认证.docx
- 数字员工助力财务管理数字化转型.docx
- DeepSeek完全实用手册(1.5版本).pdf.docx
- 2025年一季度中国消费者消费意愿调查报告-立信数据-202506.docx
- 突发环境污染事件应急管理培训.docx
- 金融-银行行业专题:中国机构配置手册(2025版)之流动性与货币政策篇-“超级央行”时代.docx
- 陈立桅-高比能长循环全固态电池关键材料.docx
- 投资策略专题:从“第四消费时代”看未来消费机遇.docx
- 华为产品战略规划全景训战.docx
最近下载
- 上海市既有建筑改造工程消防技术指南(2024年版).docx VIP
- 网易云音乐UI界面设计案例分析.pptx VIP
- 20220103云南师范大学附属俊发城中学劳动教育评价工作方案.docx
- 2024秋新人教版物理八年级上册教学课件 开学第一课 开启科学探索之旅.pptx VIP
- 不动产登记代理人《地籍调查》近年考试真题题库汇总(200题).docx VIP
- 三面自动切书机设计.doc VIP
- 《世界现代设计史题库》.doc VIP
- 今日头条2013年B轮融资商业计划书.pdf VIP
- 《汽车涂装》2024—2025学年第一学期工学一体化课程教学进度计划表.docx VIP
- 2024年中国产业出海发展研究报告.pdf VIP
文档评论(0)