【发布时间】:2014-01-17 14:08:31
【问题描述】:
我有一个 while 循环,其中包含一个每次大约需要 1 秒但偶尔需要超过 5 分钟的过程。如果发生这种 5 分钟的情况,我希望循环在 2 秒后终止。 我已经试过了
import time
t1 = time.time() + 2
while time.time() < t1:
PerformProcess
但这种方法受到每次计算 time.time() 时 PerformProcess 自动终止这一事实的限制。
我经常看到的另一个解决方案是
import time
t1 = time.time()
t2 = time.time()
while t2 - t1 < 2:
PerformProcess
t2 = time.time()
但这种方法不起作用,因为如果执行 5 分钟的过程,将无法达到 t2 的刷新。
我基本上只需要一种在 2 秒后终止 while 循环的方法,以便在 while 循环内不进行时间计算和/或使时间计算不会在 while 循环内终止进程。
如果有帮助,PerformProcess 本质上是使用 urllib 打开网页并从中提取数据。它所做的事情的简化版本本质上是
import urllib
f = urllib.urlopen(str(Hyperlink))
s = f.read()
print s
f.close()
其中 f 通常需要 1 秒,但有时由于某种原因需要更长的时间。
【问题讨论】:
-
将你的进程作为子进程/线程/某物午餐,然后运行一个计算时间的lopp并杀死它。
-
调用
time.time()不会终止PerformProcess;相反,time.time()不会被调用 直到PerformProcess自行完成。 -
你在哪个平台上?我有一个简单的解决方案,它使用 SIGALRM,但它不适用于 Windows。如果您使用的是 Windows,我有一个涉及线程的更复杂的解决方案。
-
是的,Windows 恐怕。以前从未使用过线程,但希望看到您的解决方案!
-
啊哈。使用
urllib2而不是urllib,那么你将有超时kwarg。
标签: python python-2.7 time while-loop