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