Запуск функции Python по прошествии определенного времени. Использование Threading Timer, однако он запускается только один раз, а затем останавливается

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

Это функция, которая содержит таймер:

    def executor(file):
        x = datetime.today()
        y = x.replace(day=x.day, hour=x.hour, minute=x.minute, second=x.second+10, microsecond=0)
        delta_t = y-x
        secs = delta_t.seconds+1
        t = Timer(secs, parse_file, [file])
        t.start()

Функция, которую я пытаюсь вызвать, это parse_file(file_name). Я передаю file_name при вызове функции executor.


person M. Barbieri    schedule 08.06.2016    source источник


Ответы (1)


Вы не предоставили достаточно подробностей о своей реальной проблеме, какой код вы хотите запускать более одного раза? Можете ли вы показать код, который на самом деле вызывает эту функцию?

Когда вы вызываете start, основной поток продолжит выполнение с этого места, в то время как запланированная вами задача вызовет метод parse_file в указанное время и завершится после завершения. Мне кажется, что у вас нет ничего, что поддерживает ваш основной поток (то есть у вас больше нет кода после вызова исполнителя).

Вот небольшой пример, показывающий, как вы можете использовать таймер для выполнения задач, пока основной поток все еще работает. Вы можете продолжать вводить ввод, и оператор печати покажет вам все потоки, завершенные с момента последнего ввода ввода.

from threading import Timer
import sys

def scheduled_task(arg):
    print("\ntask complete arg %s!\n"%(arg))

def run_scheduled_task(arg):
    timer = Timer(10, scheduled_task, [arg])
    timer.start()

done = False
while not done:
    user_input = input("Give me some input (exit to stop): ")
    if user_input == 'exit':
        print('Exiting')
        done = True
    else:
        run_scheduled_task(user_input)
person Aaron    schedule 08.06.2016