为什么应在5秒后退出缩进时,eventlet允许它完成6秒?
>>> with eventlet.Timeout(5):
time.sleep(6)
x = 1
>>> x
1
最佳答案
Eventlet提供协作多线程。这意味着您需要屈服控制以使集线器或协程(在这种情况下,集线器实现超时)有运行的机会。要进行产量控制:
使用绿色版本的IO并进入睡眠状态
或执行eventlet.monkey_patch()
,现在您可以使用常规的time
,socket
等模块,并与Eventlet合作,以“绿色”版本代替。
任何没有绿色调用的CPU严格代码,例如[_ for _ in xrange(1000000000)]
都根本无法中断。如果发现自己处于类似情况,请将eventlet.sleep(0)
放在循环中的某个位置,这将进入Eventlet集线器并允许超时工作。
关于python - Eventlet超时未退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30795353/