使用gevent.Timeout(0.1)作为tt:
time.sleep(1)
以上,不会引发异常
使用gevent.Timeout(0.1)作为tt:
gevent.sleep(1)
throw gevent.timeout.Timeout:0.1秒
区别在于time.sleep()和gevent.sleep()!
答案 0 :(得分:1)
time.sleep()实际上暂停了所有代码的执行,并且不允许任何其他代码运行。 Gevent是一个事件循环,这意味着它允许其他"线程" (greenlets)在阻止时运行。
基本上gevent有一个正在执行的任务列表。它只允许一次运行1个任务。如果你说time.sleep(1),那个任务仍在运行,但没有做任何事情。如果你说gevent.sleep(1),它会暂停当前任务并允许其他任务运行。
gevent.Timeout()实际上启动了第二个任务来监控已经过去的时间。由于time.sleep()永远不会产生,第二个任务永远不会有机会抛出错误。