1

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

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

1 回答 1

3

Eventlet 提供协作多线程。这意味着您需要让出控制权才能让集线器或协程(在这种情况下,集线器实现超时)有机会运行。屈服控制:

  • 要么使用绿色版本的 IO 和 sleep
  • 或者 execute eventlet.monkey_patch(),现在你可以使用常规time的 , socket, 等模块,替换为“绿色”版本,与 Eventlet 合作。

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

于 2015-06-13T06:57:49.350 回答