超时调用 gevent.sleep

Call gevent.sleep with timeout

我基本上希望 gevent.sleep 表现得像 time.sleep,因为它 returns 在 恰好 之后执行(而不是 至少 ) 一些秒数,但同时允许其他 Greenlets 运行。

一个例子:

import gevent
def a():
    while True:
        print "A"
        gevent.sleep(0.2)
def b():
    gevent.spawn(a)
    while True:
        print "B"
        gevent.sleep(1)
b()
# often get more than 10 or 20 'A's for each 'B', would expect close to 5

是否有更好的方法来获得所需的行为?

您的代码非常好。我 运行 它在我的 linux 机器上并且有这个输出:

乙 一种 一种 一种 一种 一种 乙 一种 一种 一种 一种 一种 乙 一种 一种 一种 一种 一种 乙 一种 一种 一种 一种 一种 乙 一种 一种 一种 一种 一种 乙 一种 一种 一种 一种 一个

所以它在我这边工作得非常可靠,运行 gevent 1.0.1 和 python2.7。 如果它对你不起作用,你可能想尝试更新 python 或 gevent.