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人阅读 评 ...
随机推荐
- 漫游Kafka之过期数据清理【转】
转自:http://blog.csdn.net/honglei915/article/details/49683065 Kafka将数据持久化到了硬盘上,允许你配置一定的策略对数据清理,清理的策略有两 ...
- TNS-12518,TNS-12536,TNS-00506,Linux Error: 11: Resource temporarily unavailable
TNS-12518: TNS:listener could not hand off client connection TNS-12536: TNS:operation would block T ...
- 取出csv文件中的中文评论数据
# -*- coding: utf-8 -*- import csv import re csvfile = 'weibo.csv' def columns_data(path, column): c ...
- mysql 添加外键时 error 150 问题总汇
当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的.像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上, ...
- kvm libvirt 虚拟机管理
http://www.2cto.com/os/201203/123128.html kvm虚拟机管理一.环境role hostname ip O ...
- (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案
我在使用requests访问某个https网站时出现错误 error::SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify fai ...
- JavaScript高级 面向对象(13)--构造函数的执行过程
说明(2017-4-2 21:50:45) 一.构造函数是干什么用的: 1. 初始化数据的. 2. 在js给对象添加属性用的,初始化属性值用. 二.创建对象的过程: 1. 代码:var p = new ...
- [转]JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...
- 有用sql语句一
DECLARE @retval int, @param1 int EXECUTE @retval=master.dbo.xp_fileexist 'D:\TkSoft\SamplePic\Fabric ...
- Sphinx/Coreseek 4.1的安装流程
yum install mysql-devel libxml2-devel expat-devel cd /data/software/ wget http://www.coreseek.cn/upl ...