ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:32.95KB ,
资源ID:859722      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/859722.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Eventlet学习总结汇编.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Eventlet学习总结汇编.docx

1、Eventlet学习总结汇编Eventlet定义:eventlet是一个用来处理和网络相关的python网络库,而且可以通过协程来实现并发,在eventlet里,把“协程”叫做greenthread。所谓并发,就是开启了多个greenthread,并且对这些greenthread进行管理,以实现非阻塞式的I/O。 Eventlet特性:A、非阻塞I/O模型B、协程(Coroutines)使得开发者可以采用阻塞式的开发风格,却能够实现非阻塞I/O的效果 C、隐式事件调度,使得可以在Python解释器或者应用程序的某一部分去使用Eventlet 关于协程,大致可以理解成允许子程序可以多次暂停和恢复

2、执行,是实现多任务的一种有效手段,Eventlet的基础是greenlet,这是实现协程(Coroutine) 的基础。协程又被称作 微线程“,简单点说就是在一个原生线程上通过拷贝和切换 堆栈帧数据来实现执行多个工作,看上去和传统的单CPU,多线程(Threading)执行方式差不多 Eventlet的安装:Windows下安装1、从2、在cmd中输入python,出现如下显示,表明安装python安装成功3、进入cmd下,输入easy_install eventlet命令就会从互联网上下载并自动安装eventlet到python目录中(目录示例:C:Python27Libsite-packa

3、geseventlet-0.9.17-py2.7.eggeventlet)4、输入python,进入python环境,输入import eventlet命令,出现以下输出表明eventlet安装成功Linux下安装:wget tar -zxf ActivePython-2.7.2.5-linux-x86_64.tar.gz cd ActivePython-2.7.2.5-linux-x86_64make installeasy_install eventlet关于eventlet可以参照eventlet的官方网站: import eventletpool = eventlet.GreenPoo

4、l(10000)while True: pool.spawn(func,args) 说明:1、GreenPool 用来实现协程,保证并行2、pool = eventlet.GreenPool(10000) 创建一个可以处理 10000 个客户端连接的线程池, 应用场景:做一个 IM 原型时,服务器需要处理多客户端连接但又不想使用传统的多线程编程。3、spawn() 启动一个 GreenThread 执行目标函数 完成具体业务. 4、每个func之间切换,实施“你运行一会、我运行一会”,并且在进行切换时必须指定何时切换以及切换到哪,当出现阻塞时,就显式切换到另一段没有被阻塞的代码段执行,直到原先

5、的阻塞状况消失以后,再人工切换回原来的代码段继续处理.5、eventlet 可以用来处理多线程方面的工作,但它使用的是 green threads 概念,所以用资源的开销很少。Eventlet中常用类说明:greenthread 1)sleep(seconds=0):中止当前的GreenThread,以允许其它的GreenThread执行。 2)spawn(func,*args,*kwargs): 创建一个GreenThread 去运行func这个函数,*args,*kwargs是传递给func的参数。返回值是一个eventlet .GreenThread对象,这个对象可以用来接受func函数

6、运行的返回值。 3) spawn_n(func,*args,*kwargs):这个函数和spawn()有点类似,不同的是它没有返回值,因此效率更高。 4) spawn_after(seconds,func,*args,*kwargs):这个函数和spawn()基本上一样,都有一样的返回值,不同的是它可以限定在什么时候执行这个GreenThread,即在seconds秒之后,启动这个GreenThread ps:源码地址C:Python27Libsite-packageseventlet-0.9.17-py2.7.eggeventletgreenthread.pyGreenPool 这是一个类,

7、继承object,在这个类中用set集合来容纳所创建的GreenThread,并且可以指定容纳线程的最大数量(默认是1000个),它的内部是用Semaphore和Event这两个类来对池进行控制的,这样就构成了线程池。其中,有几个比较重要的方法: running(self):返回当前池中正在执行函数的GreenThread数 free(self):返回当前池中仍可容纳的GreenThread数 spawn(self, function, *args, *kwargs):返回GreenThread ,可以接受func函数执行后返回的结果 spawn_n(self, function, *args

8、, *kwargs): 同spawn(self, function, *args, *kwargs),但是不返回结果 starmap(self, function, iterable)和imap(self, function, *iterables): 这两个函数和标准的库函数中的这两个函数实现的功能是一样的,所不同的是这里将这两个函数的执行放到了GreenThread中。前者实现的是从iterable中取出每一项作为function的参数来执行,后者则是分别从iterables中各取一项,作为function的参数去执行。 如:imap(pow, (2,3,10), (5,2,3) - 32

9、 9 1000 starmap(pow, (2,5), (3,2), (10,3) - 32 9 1000ps:源码地址C:Python27Libsite-packageseventlet-0.9.17-py2.7.eggeventletgreenpool.pyGreenPile 这也是一个类,继承object,在它内部维护了一个GreenPool对象和一个Queue对象。这个GreenPool对象可以是从外部传递进来的,也可以是在类内部创建的,GreenPool对象主要是用来创建GreenThread的,即在GreenPile内部调用了GreenPool.spawn()方法。而Queue对象

10、则是用来保存spawn()方法的返回值的,即Queue中保存的是GreenThread对象。并且它还实现了next()方法,也就意味着GreenPile对象具有了迭代器的性质。所以如果我们要对GreenThread的返回值进行操作的话,用这个类是再好不过的了。ps:源码地址C:Python27Libsite-packageseventlet-0.9.17-py2.7.eggeventletgreenpool.pyQueue 继承LightQueue,Queue中包含了两个方法:task_done()join() task_done()是被GreenThread所调用的,表示在这个项上的所有工作

11、都做完了join()是阻塞,直到队列中所有的任务都完成。 LifoQueue和PriorityQueue都是Queue的子类,是存放数据的两种不同的方式。 LifoQueue检索的规则是最近加入的最先检索PriorityQueue检索的规则是优先级最低的最先检索ps:源码地址C:Python27Libsite-packageseventlet-0.9.17-py2.7.eggeventletqueue.pyNetwork Convenience Functions(和网络相关的函数) 这些函数定义在convenience.py文件中,对和socket相关的网络通信进行了包装,注意,这里用的so

12、cket是经过修改后的socket,以使它使用绿GreenThread,主要有以下方法: 1)connect(addr, family=socket.AF_INET, bind=None) 主要执行了以下几个步骤:新建了一个TCP类型的socket,绑定本地的ip和端口,和远程的地址进行连接 ,源码如下:def connect(addr, family=socket.AF_INET, bind=None): sock = socket.socket(family, socket.SOCK_STREAM) if bind is not None: sock.bind(bind) sock.con

13、nect(addr) return sock 参数说明:addr:需要连接的服务器的地址,对于TCP sockets来说,addr是一个元组 (host, port)Family:socket family,可选Bind:需要绑定的本地地址,可选2)listen(addr, family=socket.AF_INET, backlog=50) 过程和connect()类似,只是把connect()换成了listen(),backlog指定了最大的连接数量,源码如下:def listen(addr, family=socket.AF_INET, backlog=50): sock = socke

14、t.socket(family, socket.SOCK_STREAM) if sys.platform:3 != win: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(addr) sock.listen(backlog) return sock参数说明:addr:监听的地址,对于TCP sockets来说,是一个元组(host, port)socket family,可选backlog:队列连接最大数,最小为13)serve(sock, handle, concurrency=1000) 这个函数直接创建了一个socket服务器,在它内部创建了一个GreenPool对象,默认的最大GreenThread数是1000,然后是一个循环来接受连接,源码如下:def serve(sock, handle, concurrency=1000): pool = greenpool.GreenPool(concurrency) server_gt = greenthread.getcurrent() while True: try: conn, addr = sock.accept() gt = pool.spawn(ha

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1