Python——eventlet.greenthread
该模块实现 eventlet 中的 “绿色线程” 即协程。
目录
一、模块级函数
sleep()
spawn()
模块级函数
eventlet.greenthread.sleep(seconds=0)
- 在至少参数 seconds 秒后让出控制权,参数 seconds 可以是一个整数,也可是浮点型的。当参数 seconds 为0时,主动让出控制权,在执行长时间计算时这么做有助于让别的协程也得到执行。
- eventlet.greenthread.spawn(func, *args, **kwargs)
- 孵化(创建)一个可以调用 func(*args, **kwargs) 的协程,返回一个 GreenThread 对象,可以使用该对象获得调用 func(*args, **kwargs) 的返回值。
- 这条指令执行后控制权立即返回给调用这个接口的函数,创建的协程只是有了调用 func(*args, **kwargs) 的能力,而不是这里一孵化,协程就会立刻调用 func(*args, **kwargs)。 spawn_after() 可以指定在一定时间后孵化一个协程。
- eventlet.greenthread.spawn_n(func, *args, **kwargs)
- 孵化(创建)一个可以调用 func(*args, **kwargs) 的协程,这里返回的协程不能获取 func(*args, **kwargs) 的返回值或者抛出的异常,比 spawn() 更快,当没有关键字参数的时候该指令运行最快。
- 如果函数抛出一个异常,spawn_n 会打印堆栈轨迹,可以通过 eventlet.debug.hub_exceptions() 将这个功能关闭。
- eventlet.greenthread.spawn_after(seconds, func, *args, **kwargs)
- 参数 seconds 秒后孵化一个可以调用 func 的协程。返回一个 GreenThread 对象,可以用来获取调用 func 的返回值。
- eventlet.greenthread.spawn_after_local(seconds, func, *args, **kwargs)
- seconds 秒后孵化协程,如果当前的协程退出,那么函数不会被调用。 seconds 可以是整数或者浮点数,参数 func 会在自己所在的协程中执行,传给它的参数正好是 args 和 kwargs。
- 返回一个 GreenThread 对象,可以获取 func 的返回值。
- GreenThread 对象
- class eventlet.greenthread.GreenThread(parent)
- GreenThread 类是 Greenlet 的子类,添加了能够获取主函数返回值的功能,不要直接构造 GreenThread 对象,而是用 spawn() 函数来孵化一个新的协程!
- cancel(*throw_args)
- 如果这个协程还没有运行,等价于杀掉它,如果这个协程已经运行了,这里会等待它运行完,然后杀掉它。一旦调用过这个函数,所有的 wait() 调用都会抛出异常 throw_args (默认为 greenlet.GreenletExit)。
- kill(*throw_args)
- 强制杀掉协程,就算协程里面的函数已经运行了也要杀掉它。一旦调用过这个函数,所有的 wait() 调用都会抛出异常 throw_args (默认为 greenlet.GreenletExit)。
- link(func, *curried_args, **curried_kwargs)
- 建立一个函数 func ,这个函数会以当前协程的结果为参数调用。
- 函数 func 应该有以下这种签名:
def func(gt, [curried args/kwargs]):
- 当协程运行完成后,它会立刻调用 func ,将自己和 curried arguments 一起传递给 func 。如果 func 想要获取协程的返回值,就应该调用第一个参数,也就是调用自己的那个协程的 wait() 方法。
- func 以调用自己的协程的上下文运行,所以有可能会干扰其他被连接的函数,比如通过显式切换到其他的协程。
- unlink(func, *curried_args, **curried_kwargs)
- 移除 link() 函数设置的连接,如果成功返回 True ,否则返回 False。
- wait()
- 返回当前协程中主函数的执行结果,如果是一般的执行结果,wait() 会返回它;如果是异常,wait() 会抛出同样的异常(但是堆栈轨迹不可避免的包含一些协程模块中的帧)。
Python——eventlet.greenthread的更多相关文章
- Python——eventlet
eventlet语境下的“绿色线程”普通线程之间的区别: 1. 绿色线程几乎没有开销,不用像保留普通线程一样保留“绿色线程”,每一个网络连接对应至少一个“绿色线程”: 2. 绿色线程需要人为的设置使其 ...
- Python——eventlet.hubs
Hub构成了 Eventlet 的事件循环,它分发 I/O 事件.调度 greenthread.Hub的存在使得协程被提升为 greenthreads. Eventlet 有多种hub的实现,所以在使 ...
- Python——eventlet.event
该模块提供eventlet的事件支持,事件提供了跨 greenthread 的操作原语. 同一个事件对象既可以发出事件也可以接收(等待)事件,不同的协程共享这一个事件对象,就为不同协程之间基于事件的同 ...
- Python——eventlet.backdoor
eventlet.backdoor 是正在运行中的进程内的 Pyhon 交互解释器. 该模块便于检测一个长期运行进程的运行状态,提供了一种可以不阻塞应用正常操作的 Pyhon 交互解释器,从而极大地方 ...
- Python——eventlet.wsgi
eventlet 的 wsgi 模块提供了一种启动事件驱动的WSGI服务器的简洁手段,可以将其作为某个应用的嵌入web服务器,或作为成熟的web服务器,一个这样的web服务器的例子就是 Spawnin ...
- Python——eventlet.greenpool
该模块提供对 greenthread 池的支持. greenthread 池提供了一定数量的备用 greenthread ,有效限制了孵化 greenthread 过多导致的内存不足,当池子中没有足够 ...
- Python——eventlet.websocket
使用该模块可以方便地创建 websocket 服务器,要创建一个websocket服务器,只需要将一个句柄函数用装饰器 WebSocketWSGI 装饰即可,然后这个函数就可以当做一个WSGI应用: ...
- python import eventlet包时提示ImportError: cannot import name eventlet
root@zte-desktop:/home/ubuntu/python-threads# cat eventlet.py #!/usr/bin python import eventlet from ...
- Python几种并发实现方案的性能比较
http://blog.csdn.net/permike/article/details/54846831 Python几种并发实现方案的性能比较 2017-02-03 14:33 1541人阅读 评 ...
随机推荐
- 每日英语:China's Bigger Innovation Problem
Last month's Third Plenum meeting of Chinese leaders seemed to signal Beijing's intention to experim ...
- Android 编程下 TextView 添加链接的一种方式
通过如下这种方式给 TextView 添加的链接支持链接样式.点击事件.href 样式,代码如下: package cn.sunzn.tlink; import android.app.Activit ...
- Markdown学习(一)
先从了解开始. 1 什么是标记语言(Markup Language)? 可以参考下wiki Markup language:https://en.wikipedia.org/wiki/Markup_l ...
- c++ primer读书笔记之c++11(四)
1 带有作用域的枚举 scoped-enumeration 相信大家都用过枚举量,都是不带有作用域的,在头文件中定义需要特别注意不要出现重名的情况.为了解决这种问题,c++11提供了带作用于的枚举. ...
- 【转】Linux mysql停止失败的解决办法 Stopping MySQL database server mysqld [fail]
root@ubuntu:/# /etc/init.d/mysql stop * Stopping MySQL database server mysqld [fail] root@ubuntu:/# ...
- Fiddler filter 过滤隐藏css、js、图片等
REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav|js|jpeg)(\?.*)?$ Fiddler教程 http://www.jianshu.co ...
- sscanf函数——强大的C语言库函数
这个函数真的很强大,这篇随笔也将一直更新一些总结,直到涵盖大多数应用: eg1: 今天公司项目中从云端获取了一段字符串---"+CBC: 0,90,4090" 我想获取其中的数字0 ...
- 06Vue.js快速入门-Vue组件化开发
组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...
- JAVA-JSP内置对象之session对象获得session的其他信息
相关资料:<21天学通Java Web开发> session对象 获得session的其他信息 SessionDemo2.jsp <%@ page language="ja ...
- Eigen教程(1)
整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 简介 Eigen是C++中可以用来调用并进行矩阵计算的一个库,简单了说它就是一个c+ ...