3

我对 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)
4

1 回答 1

2

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

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

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

于 2014-12-18T21:12:56.043 回答