6分钟后重新启动脚本

时间:2015-08-31 15:25:20

标签: python timer

我想在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

我该怎么办?

2 个答案:

答案 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次迭代之前,循环将中止,然后重新启动。