2016-03-03 73 views
0

呼叫gevent.sleep我會本質上就像gevent.sleep表現得像在time.sleep返回執行後正是(不至少)一定的秒數,但允許其他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 

有沒有更好的方式來獲得所需的行爲?

回答

1

你的代碼非常好。我跑了我的Linux機器上,並且有這樣的輸出:

乙 一個 一個 一個 一個 一個 乙 一個 一個 一個 一個 一個 乙 一個 一個 一個 一個 A B A A A A A B 一個 一個 一個 一個 一個 乙 一個 一個 一個 一個 一個

所以它的工作原理非常可靠地在我的結束,運行GEVENT 1.0.1和python2.7。 如果它不適用於您,您可能想嘗試更新python或gevent。

+0

運行python 2.7.11和gevent 1.0.2。有趣的是,重新啓動python之後,我第一次得到正確的輸出,但是在後續調用後我描述了這個問題。 – user2561747

+0

啊,它只能忘記殺死在'KeyboardInterrupt'上運行'a'的Greenlet – user2561747