2015-08-31 3 views
1

Я хочу сделать цикл for в Python, который перезапустится через 6 минут или до тех пор, пока цикл не закончит делать 500 раз.Перезапустить скрипт через 6 минут

Возможно, есть команда, которую я могу применить в начале сценария, чтобы перезапустить его через 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

Использовать сон (...) метод временного модуля в течение 6 минут time.sleep (300) – mmachine

+0

@mmachine Но он остановит цикл после одного раунда в течение 6 минут, и я не хочу его –

ответ

1

Следующий подход должен работать, он сначала вычисляет 6 минут в будущем и запускает ваш «скрипт», выполняющий 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. Это не повлияет на общую скорость, а просто означает, что следующая итерация начнется в течение 5 секунд 6 минут, а не 1 секунда 6 минут (если это имеет смысл).

Попробуйте следующую демонстрационную версию: Следующая версия работает каждые 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 итераций будут достигнуты, и затем перезапущен.

+0

Хм ... могу ли я использовать его в цикле? Потому что я хочу сделать остановку для цикла, если прошло 6 минут ** или ** после окончания цикла и закончилось 6 минут –

+0

Да, вы просто прочитали бы, чтобы проверить, достигнуто ли время пробуждения и вырваться из петля. –

+0

Будет ли 'time.sleep (1)' перезапустить мой скрипт? Потому что мне нужен сценарий. Я думал о вызове функции, которая включает 'for in in range (500):', поэтому вместо 'time.sleep (1)' он перезапустит цикл 'While'. Вы можете отредактировать свой ответ? –

1

Возможность перезапуска скрипта через 6 минут - использовать while loop и использовать counter для подсчета 500 раз, смешанного с timer для задержки времени.

import time 

counter = 0 

while counter <= 500: 
    <SCRIPT> 
    ........ 
    ........ 
    counter += 1 
    time.sleep(6 * 60) 

time.sleep() функция принимает время в секундах, в качестве параметра, так 6 * 60 даст вам 6 минут.

+0

'Counter + = Вы имели в виду, что в Python нет '++' –

+0

@RonHalfon Да! Спасибо. Я так привык писать в Java и C++ haha ​​ –

+0

Не будет ли этот сон на каждой итерации цикла? Я не думаю, что это желаемый эффект. – DrewB

Смежные вопросы