该模块实现 eventlet 中的 “绿色线程” 即协程。

  相关的 greenlet 模块的介绍。

  目录

  一、模块级函数

    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的更多相关文章

  1. Python——eventlet

    eventlet语境下的“绿色线程”普通线程之间的区别: 1. 绿色线程几乎没有开销,不用像保留普通线程一样保留“绿色线程”,每一个网络连接对应至少一个“绿色线程”: 2. 绿色线程需要人为的设置使其 ...

  2. Python——eventlet.hubs

    Hub构成了 Eventlet 的事件循环,它分发 I/O 事件.调度 greenthread.Hub的存在使得协程被提升为 greenthreads. Eventlet 有多种hub的实现,所以在使 ...

  3. Python——eventlet.event

    该模块提供eventlet的事件支持,事件提供了跨 greenthread 的操作原语. 同一个事件对象既可以发出事件也可以接收(等待)事件,不同的协程共享这一个事件对象,就为不同协程之间基于事件的同 ...

  4. Python——eventlet.backdoor

    eventlet.backdoor 是正在运行中的进程内的 Pyhon 交互解释器. 该模块便于检测一个长期运行进程的运行状态,提供了一种可以不阻塞应用正常操作的 Pyhon 交互解释器,从而极大地方 ...

  5. Python——eventlet.wsgi

    eventlet 的 wsgi 模块提供了一种启动事件驱动的WSGI服务器的简洁手段,可以将其作为某个应用的嵌入web服务器,或作为成熟的web服务器,一个这样的web服务器的例子就是 Spawnin ...

  6. Python——eventlet.greenpool

    该模块提供对 greenthread 池的支持. greenthread 池提供了一定数量的备用 greenthread ,有效限制了孵化 greenthread 过多导致的内存不足,当池子中没有足够 ...

  7. Python——eventlet.websocket

    使用该模块可以方便地创建 websocket 服务器,要创建一个websocket服务器,只需要将一个句柄函数用装饰器 WebSocketWSGI 装饰即可,然后这个函数就可以当做一个WSGI应用: ...

  8. python import eventlet包时提示ImportError: cannot import name eventlet

    root@zte-desktop:/home/ubuntu/python-threads# cat eventlet.py #!/usr/bin python import eventlet from ...

  9. Python几种并发实现方案的性能比较

    http://blog.csdn.net/permike/article/details/54846831 Python几种并发实现方案的性能比较 2017-02-03 14:33 1541人阅读 评 ...

随机推荐

  1. linux命令(47):Linux下对文件进行按行排序,去除重复行

    Linux下对文件进行按行排序:sort 与 uniq 命令简介 Linux | May 24, 2015 | linux sort 命令可针对文本文件的内容,以行为单位进行排序.其基本语法格式为: ...

  2. linux命令(41):文件和文件夹的颜色

    各个颜色的文件分别代表的是:蓝色表示目录:绿色表示可执行文件:红色表示压缩文件:浅蓝色表示链接文件:灰色表示其它文件:红色闪烁表示链接的文件有问题了:黄色是设备文件,包括block, char, fi ...

  3. JAVA Zero Copy的相关知识【转】

    转自:https://my.oschina.net/cloudcoder/blog/299944 摘要: java 的zero copy多在网络应用程序中使用.Java的libaries在linux和 ...

  4. SAP BI vs. Oracle BI

    对比Oracle BI产品和SAP BI 产品,做一些简单的产品功能比较,经供参考. 这里把SAP和Oracle同类的产品放在一行,用于比较. SAP BI 特点 Oracle BI 特点 BW 和S ...

  5. HTML <meta> 标签 和 http-equiv

    前言 经常在写HTML,但是对于meta 的设置却一直疏于关注. <meta> 是什么 <meta> 是一个HTML的标签(辅助性标签). 它的位置位于文档的头部  <h ...

  6. Eigen教程(5)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 块操作 块是matrix或array中的矩形子部分. 使用块 函数.block(), ...

  7. MVC LinqToSql Json DbComparisonExpression 需要具有可比较类型的参数。

    需求是:使用post方式传入Controller一个id,然后返回给前台一个Json.突然就报了这个错误,折腾了俩小时, 发现是linq to sql 的语法错了

  8. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    在使用selenium处理中文网页或者网页标题是中文的时候,出现UnicodeEncodeError: 'ascii' codec can't encode characters in positio ...

  9. Ehcache BlockingCache 源码分析

    BlockingCache是对Ehcache进行的扩展,BlockingCache内置了读写锁,不需要用户显示调用. 要彻底分析BlockingCache的原理,需要首先来看一下它内部用到的一些类. ...

  10. springcloud配置中心客户端配置遇到的坑

    1. 出错信息如下: 在启动配置中心的客户端时,报以下错误信息: Caused by: java.lang.IllegalArgumentException: Could not resolve pl ...