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人阅读 评 ...
随机推荐
- 用ubuntu的grpb2引导Remix OS或Phoenix OS
Remix OS游戏版,这里下载:http://youxi.jide.com/ 安装简单.我这里要解决的是安装后用ubunu的grub2菜单去引导它. 方法如下: 进入ubuntu系统里修改其grub ...
- 【Acm】八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题. 其解决办法和我以前发过的[算法之美—Fire Net:www.cnblogs.com/lcw/p/3159414.html]类似 题目:在8 ...
- JS中的history对象
window.history指向History对象,它表示当前窗口的浏览历史. History对象保存了当前窗口访问过的所有页面网址. history.back()//后退到前一个网址 等同于 his ...
- hive的join查询
hive的join查询 语法 join_table: table_reference [INNER] JOIN table_factor [join_condition] | table_refere ...
- C# FileStream 文件复制
方法: /// <summary> /// 文件复制 /// </summary> /// <param name="source">源文件,例 ...
- JAVA-数据库之更新记录
相关资料:<21天学通Java Web开发> 更新记录 StatementUpdate.jsp <%@ page language="java" contentT ...
- 基于html5可拖拽图片循环滚动切换
分享一款基于html5可拖拽图片循环滚动切换.这是一款支持手机端拖拽切换的网站图片循环滚动特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="s ...
- 微服务之springCloud-docker-hystrix-dashboard-turbine(九)
简介 Hystrix的主要优点之一是它收集关于每个HystrixCommand的一套指标.Hystrix仪表板以有效的方式显示每个断路器的运行状况,通过Hystrix Dashboard我们可以在直观 ...
- sphinx增量索引和主索引来实现索引的实时更新
项目中文章的信息内容因为持续有新增,而文章总量的基数又比较大,所以做搜索的时候,用了主索引+增量索引这种方式来实现索引的实时更新. 实现原理: 1. 新建一张表,记录一下上一次已经创建好索引的最后一条 ...
- Visual Studio的NuGet包管理器无法加载
由于网络原因,虽然地址http://www.nuget.org和https://www.nuget.org/api/v2/在浏览器可以正常打开,但是在VS中使用默认的NuGet程序包源经常加载不出来, ...