2015-06-12 54 views
1

爲什麼eventlet允許它完成6秒,當它應該在5秒後退出縮進?Eventlet超時不退出

>>> with eventlet.Timeout(5): 
     time.sleep(6) 
     x = 1 
>>> x 
1 
+0

我敢肯定你應該使用'eventlet.sleep',如果你想要一個eventlet greenthread睡覺。 – user2357112

+0

@ user2357112這是什麼東西特別睡覺,或者如果我使用其他調用,它也不會退出中途通過? – User

回答

1

Eventlet提供協作式多線程。這意味着你需要控制權給中樞或協同程序(在這種情況下,中心實現超時)運行的機會。爲了得到控制:

  • 要麼使用IO的綠色版本,並睡
  • 或執行eventlet.monkey_patch(),現在你可以使用普通timesocket等模塊,通過「綠色」版本,與Eventlet合作所取代。

任何沒有綠色調用的CPU密碼,例如[_ for _ in xrange(1000000000)]根本無法中斷。如果發現自己處於類似情況,則將eventlet.sleep(0)置於循環的某個位置,這將進入Eventlet集線器並允許超時工作。