- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Eventlet学习总结
Eventlet定义:eventlet是一个用来处理和网络相关的python库,而且可以通过协程来实现并发,在eventlet里,把“协程”叫做greenthread。所谓并发,就是开启了多个greenthread,并且对这些greenthread进行管理,以实现非阻塞式的I/O。
协程(Coroutines)使得开发者可以采用阻塞式的开发风格,却能够实现非阻塞I/O的效果 隐式事件调度,使得可以在Python解释器或者应用程序的某一部分去使用Eventlet 关于协程,大致可以理解成允许子程序可以多次暂停和恢复执行,是实现多任务的一种有效手段Eventlet的基础是greenlet,这是实现协程(Coroutine) 的基础协程又被称作 微线程“简单点说就是在一个原生线程上通过拷贝和切换 堆栈帧数据来实现执行多个工作看上去和传统的单CPU,多线程(Threading)执行方式差不多
进入cmd下,输入easy_install eventlet命令就会从互联网上下载并自动安装eventlet到python目录中(目录示例:C:\Python27\Lib\site-packages\eventlet-0.9.17-py2.7.egg\eventlet)
输入python,进入python环境,输入import eventlet命令,出现以下输出表明eventlet安装成功
Linux下安装:
wget /ActivePython/releases//ActivePython--linux-x86_64.tar.gz
tar -zxf ActivePython--linux-x86_64.tar.gz
cd ActivePython--linux-x86_64
make install
easy_install eventlet
关于eventlet可以参照eventlet的官方网站:/
说明:
1、GreenPool 用来实现协程,保证并行
pool = eventlet.GreenPool(10000) 创建一个可以处理 10000 个客户端连接的线程池做一个 IM 原型时,服务器需要处理多客户端连接但又不想使用传统的多线程编程
3、spawn() 启动一个 GreenThread 执行目标函数 完成具体业务.
每个func之间切换,实施“你运行一会、我运行一会”,并且在进行切换时必须指定何时切换以及切换到哪,当出现阻塞时,就显式切到另一段没有被阻塞的代码段执行,直到原先的阻塞状况消失以后,再人工切换回原来的代码段继续处理.
eventlet 可以用来处理多线程方面的工作,但它使用的是 green threads 概念,所以用资源的开销很少。
greenthread
1)sleep(seconds=0):中止当前的,以允许其它的GreenThread执行。
GreenThread 去运行func这个函数,*args,**kwargs是传递给func的参数。返回值是一个eventlet .GreenThread对象,这个对象可以用来接受func函数运行的返回值。
3) spawn_n(func,*args,**kwargs):这个函数和spawn()有点类似,不同的是它没有返回值,因此效率更高。
4) spawn_after(seconds,func,*args,**kwargs):这个函数和spawn()基本上一样,都有一样的返回值,不同的是它可以限定在什么时候执行这个,即在seconds秒之后,启动这个
ps:源码地址
C:\Python27\Lib\site-packages\eventlet-0.9.17-py2.7.egg\eventlet\greenthread.py
GreenPool
这是一个类,在这个类中用set集合来容纳所创建的,并且可以指定容纳线程的最大数量(默认是1000个),它的内部是用Semaphore和Event这两个类来对池进行控制的,这样就构成了线程池。其中,有几个比较重要的方法:
running(self):返回当前池中的数
ree(self):返回当前池中仍可容纳的数
spawn(self, function, *args, **kwargs)spawn_n(self, function, *args, **kwargs): spawn(self, function, *args, **kwargs),但是不返回结果
starmap(self, function, iterable)和imap(self, function, *iterables):
这两个函数和标准的库函数中的这两个函数实现的功能是一样的,所不同的是这里将这两个
文档评论(0)