2016-07-27 3 views
0

У меня есть модуль Python, который принимает 2 Args (входной файл конфигурации и выходной файл). Я называю основную функцию стандартным способом в конце модуля.Python 2.7 - Call Main recursivelly

# Call to main function 

if __name__ == '__main__': 
    main() 

В определенных условиях времени в логике в конце основной функции (Время обработки < Текущее время - 20 минут), у меня есть потребность, чтобы обработать основную функцию снова до тех пор, время обработки в течение 20 минут Текущее время.

Учитывая аргументы, переданные в модуль, я должен сделать что-то особенное или это так просто, как я это, если заявление в конце главного

if (time delta condition): 
    main() 
else: 
    sys.exit() 

Я предполагаю, что модуль главный вызов выше все равно должен быть там, чтобы вызвать модуль из Cron.

Просьба сообщить. Мне нужен основной процесс обработки argv[1] и [2] всякий раз, когда он вызывается.

С уважением Siva

+0

Я считаю, что ответ «Да». Это так же просто, как вы предлагаете. Ты это пробовал? – smarx

+0

Это сработало. Спасибо smarx – Siva

ответ

0

Вообще рекурсия не большой метод управления потоком. Во-первых, вам может потребоваться обратить внимание на то, что произойдет, если ваш рекурсивный вызов return s (хотя вы, похоже, работаете вокруг этого, вызывая sys.exit() в нерекурсивном случае).

Вместо этого может возникнуть смысл использовать петлю while. Что-то вроде:

def main(): 
    while some_condition(): 
     do_stuff() 

Очевидно, что вам нужно будет заменить вызовы функций, которые я делаю, с фактическими сведениями о вашей проблеме.

Если условие не может быть истинным в начале, но вы хотите хотя бы раз запустить тело цикла, возможно, имеет смысл выполнить фактическую проверку состояния в конце тела цикла и сохранить результат в переменной:

def main(): 
    keep_running = True 
    while keep_running: 
     do_stuff() 
     keep_running = some_condition() 

Вы можете также использовать while True и break из цикла, если условия указывают, что это уместно в какой-то момент (который может быть в середине тела цикла):

def main(): 
    while True: 
     do_stuff() 
     if exit_condition(): 
      break 
     do_other_stuff() 
+0

Отличный способ сделать это более эффективно. Спасибо Blcknght за то, что нашли время, чтобы объяснить это. – Siva