gpt4 book ai didi

python - 如何真正在python中实现超时?

转载 作者:太空狗 更新时间:2023-10-30 02:47:02 25 4
gpt4 key购买 nike

如何在python中真正实现超时? http://eventlet.net/doc/modules/timeout.html

代码如下:

#!/usr/bin/python
import eventlet
import time
import sys
import random

while True:
try:
with eventlet.timeout.Timeout(1, False):
print 'limited by timeout execution'
while True:
print '\r' + str(random.random()),
sys.stdout.flush()
eventlet.sleep(0)
print ' Never printed Secret! '
except Exception as e:
print ' Exception: ', e
finally:
print ''
print ' Timeout reached '
print ''

永远不会超时。我哪里错了?

附言我替换了:

 time.sleep(0.1)

与:

 eventlet.sleep(0)

为异常添加 False,现在它运行良好:

with eventlet.timeout.Timeout(1):

更改为:

with eventlet.timeout.Timeout(1, False):

但它只适用于 eventlet.sleep(0.1)

例如这段代码错误:

#!/usr/bin/python
import eventlet
import time
start_time = time.time()
data = 0
with eventlet.timeout.Timeout(1, False):
while True:
data +=1
print 'Catch data ', data, ' in ', time.time() - start_time

我简单的加了sleep 0秒:

eventlet.sleep(0)

它就像一个魅力。

已解决

最佳答案

eventlet 的 Timeout 并不像您希望的那样神奇。它只能检测“greenthreaded”代码中的超时——使用 eventlet 协作多线程系统的代码。如 the Timeout docs 中所述,“你不能让这个类的纯 CPU 操作超时”。 time.sleep 使用 Python 的内部线程系统暂停,而不是 eventlet 的 greenthreads。

相反,使用 eventlet.sleep它与 greenthreads 一起正常工作。

关于python - 如何真正在python中实现超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com