为什么 eventlet 允许它完成 6 秒,而它应该在 5 秒后退出缩进?
>>> with eventlet.Timeout(5):
time.sleep(6)
x = 1
>>> x
1
Eventlet 提供协作多线程。这意味着您需要让出控制权才能让集线器或协程(在这种情况下,集线器实现超时)有机会运行。屈服控制:
eventlet.monkey_patch()
,现在你可以使用常规time
的 , socket
, 等模块,替换为“绿色”版本,与 Eventlet 合作。例如,任何没有绿色调用的 CPU 紧缩代码[_ for _ in xrange(1000000000)]
根本不可能中断。如果您发现自己处于类似情况,请放置eventlet.sleep(0)
在循环中的某个位置,这将进入 Eventlet 集线器并允许超时工作。