我想在Python中创建一个for
循环,它将在6分钟后重新启动,或者直到循环完成500次。
也许有一个命令可以在脚本开始时应用,以便在6分钟后重新启动。
我的脚本是:
if len(sys.argv) < 2:
# something
sys.exit()
else:
if sys.argv[1]=="help":
# something
sys.exit()
else:
print "start"
if len(sys.argv)== 3:
if sys.argv[2]=="safe":
set_safe()
url = sys.argv[1]
if url.count("/")==2:
url = url + "/"
m = re.search('http\://([^/]*)/?.*', url)
host = m.group(1)
for i in range(500):
# something
我该怎么办?
答案 0 :(得分:1)
在6分钟后重新启动脚本的一种可能性是使用while loop
并使用counter
计算500次,并将timer
与时间延迟混合。< / p>
import time
counter = 0
while counter <= 500:
<SCRIPT>
........
........
counter += 1
time.sleep(6 * 60)
time.sleep()
函数将以秒为单位的时间作为参数,因此6 * 60
将为您提供6分钟。
答案 1 :(得分:1)
以下方法应该有效,它首先计算未来6分钟并启动你的脚本&#34;执行500次。然后它只是循环等待,直到达到唤醒时间。所以你的脚本可以花费任何时间。如果需要更长时间,那么接下来的500将立即开始。
import time
wakeup = time.time()
while True:
wakeup += 6 * 60
for i in range(500):
# something
# Has it taken longer the 6 minutes?
if time.time() > wakeup:
break
while time.time() < wakeup:
time.sleep(1)
您可以将sleep(1)
值更改为您想要的值,例如5.它不会影响整体费率,但只是意味着下一次迭代将在6分钟的5秒内开始,而不是6分钟的1秒(如果这是有意义的话)。
尝试以下演示版本:以下版本每6秒(不是几分钟)运行,并尝试执行for
循环20次。我每次迭代减慢0.5秒来模拟工作。
import time
wakeup = time.time()
while True:
wakeup += 6
print "start",
for i in range(20):
time.sleep(0.5) # simulate work
print i,
if time.time() > wakeup:
break
print "finished"
while time.time() < wakeup:
time.sleep(1)
您将看到以下输出:
start 0 1 2 3 4 5 6 7 8 9 10 11 12 finished
start 0 1 2 3 4 5 6 7 8 9 10 finished
start 0 1 2 3 4 5 6 7 8 9 10 11 finished
正如您所看到的,当启动6秒并且在达到所有20次迭代之前,循环将中止,然后重新启动。