Python——eventlet.greenthread

本文详细介绍了eventlet模块中的绿色线程(协程)概念及其关键函数,包括sleep、spawn等,并解释了如何使用这些函数来创建和管理协程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  该模块实现 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() 会抛出同样的异常(但是堆栈轨迹不可避免的包含一些协程模块中的帧)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值