Why does eventlet allow it to finish the 6 seconds, when it should exit the indentation after 5 seconds?
>>> with eventlet.Timeout(5):
time.sleep(6)
x = 1
>>> x
1
Why does eventlet allow it to finish the 6 seconds, when it should exit the indentation after 5 seconds?
>>> with eventlet.Timeout(5):
time.sleep(6)
x = 1
>>> x
1
Copyright © 2021 Jogjafile Inc.
Eventlet provides cooperative multithreading. Which means you need to yield control to give hub or coroutines (in this case, hub implements timeouts) chance to run. To yield control:
eventlet.monkey_patch(), now you can use regulartime,socket, etc modules, replaced by "green" versions, cooperating with Eventlet.Any CPU tight code without green calls, for example
[_ for _ in xrange(1000000000)]is impossible to interrupt at all. If you find yourself in similar situation, placeeventlet.sleep(0)somewhere in loop, that would enter Eventlet hub and allow timeouts to work.