greenthread.sleep做了什么?

时间:2014-12-18 17:24:59

标签: eventlet

我对eventlet很新,并对sleep()

提出了一些问题

我用一小段代码进行了测试。

起初我产生了3个greenthreads然后调用greenthread.sleep(0),然后这3个greenthreads都来执行其中的功能。发生了什么事?

sleep()是否意味着执行所有生成的greenthread?我们传递的参数0是什么意思?

以下是代码:

import eventlet
from eventlet import greenthread
from eventlet import event
evt = event.Event()

def func1():
    print "starting func1"
    evt.wait()
    print "stopping func1"

def func2():
    print "starting func2"
    evt.wait()
    print "stopping func2"

def func3():
    evt.send()

gt1 = greenthread.spawn(func1)
gt2 = greenthread.spawn(func2)
gt3 = greenthread.spawn(func3)
greenthread.sleep(0)

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题,它应该在Eventlet文档中占有特殊的位置。

eventlet.sleep(0)将调用的greenthread重新安排到运行队列的末尾。如果有任何其他greenthreads等待运行,它们将立即执行。

Eventlet的当前实现细节有一定的保证,如果你调用sleep,调用的greenthread将不会继续,直到准备执行的所有其他greenthread 完成或达到类似的等待状态。作为实施细节开始,我们现在将其保留为公共API:致电sleep(0)以让其他人运行。