我对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)
答案 0 :(得分:2)
这是一个很好的问题,它应该在Eventlet文档中占有特殊的位置。
eventlet.sleep(0)
将调用的greenthread重新安排到运行队列的末尾。如果有任何其他greenthreads等待运行,它们将立即执行。
Eventlet的当前实现细节有一定的保证,如果你调用sleep,调用的greenthread将不会继续,直到准备执行的所有其他greenthread 完成或达到类似的等待状态。作为实施细节开始,我们现在将其保留为公共API:致电sleep(0)
以让其他人运行。