首先,理想情况下,以下代码应该同步运行 3 个 greenlets,但它会异步运行所有 3 个 greenlets。然而奇怪的事情是不管你有多少个greenlet,它都会为第二个greenlet启动一个额外的同步过程。我不是问这个问题的解决方法,只是我想了解这背后的原因。
import gevent
import time
def func(i):
t = time.time()
print('func %s started at %s' % (i, t))
secs = 5
statement = "after %s secs" % secs
gevent.sleep(secs)
print('func %s stopped in %s secs' % (i, (time.time() - t)))
apps = [gevent.Greenlet.spawn(func, i) for i in range(3)]
[app.run() for app in apps]
这是示例标准输出:
func 0 started at 1491859273.2895772
func 1 started at 1491859273.2898045
func 2 started at 1491859273.2899446
func 0 stopped in 5.0095603466033936 secs
func 1 started at 1491859278.2993205
func 1 stopped in 5.0163233280181885 secs
func 2 stopped in 5.019707918167114 secs
func 1 stopped in 5.009198188781738 secs
怎么会func 1 started
发生两次?