为什么应在5秒后退出缩进时,eventlet允许它完成6秒?

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

最佳答案

Eventlet提供协作多线程。这意味着您需要屈服控制以使集线器或协程(在这种情况下,集线器实现超时)有运行的机会。要进行产量控制:


使用绿色版本的IO并进入睡眠状态
或执行eventlet.monkey_patch(),现在您可以使用常规的timesocket等模块,并与Eventlet合作,以“绿色”版本代替。


任何没有绿色调用的CPU严格代码,例如[_ for _ in xrange(1000000000)]都根本无法中断。如果发现自己处于类似情况,请将eventlet.sleep(0)放在循环中的某个位置,这将进入Eventlet集线器并允许超时工作。

关于python - Eventlet超时未退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30795353/

10-12 16:54