Повторение процесса по прошествии времени

Я пытаюсь повторять событие время от времени (неважно, как долго, скажем, 60 секунд) в python, но у меня возникают проблемы. Это то, что у меня есть, и оно должно работать (я думал), но это не так:

def timedMessages():

    time_elapsed = time.time() - start_time

    if time_elapsed > 60:
        sendMessage("test")
        start_time = time.time()
        time_elapsed = 0
    else:
        time_elapsed = time.time() - start_time

start_time = time.time()

Функция timedMessages() вызывается внутри цикла while, где и start_time устанавливается в time.time() при запуске программы. Проблема возникает из-за того, что мое локальное start_time снова устанавливается как локальная переменная внутри функции timeMessages. Я не уверен, делаю ли я это неправильно логически или просто упускаю что-то маленькое.


person Droid    schedule 05.01.2018    source источник
comment
ты не можешь использовать time.sleep(60) ?   -  person Omar Einea    schedule 05.01.2018
comment
вы могли бы просто встроить этот код в цикл while, чтобы вы не запутались с закрытием переменных в разных областях.. если бы я не был на своем телефоне, я бы что-нибудь закодировал для вас, возможно, используя генератор . или используйте метод sleep, как предложил другой парень.   -  person mad.meesh    schedule 05.01.2018
comment
Возможный дубликат Как лучше всего повторно выполнять функцию каждые x секунд в Python?   -  person wwii    schedule 05.01.2018
comment
Также .. Запланируйте повторяющееся событие в Python 3   -  person wwii    schedule 05.01.2018
comment
Я не могу использовать time.sleep(), потому что есть другие действия, которые нужно выполнять одновременно   -  person Droid    schedule 06.01.2018


Ответы (1)


Самым простым решением было бы что-то вроде

while True:
    send_message()
    time.sleep(60)

Если send_message() занимает некоторое время и вам нужно более точное время, вы можете сделать что-то вроде

while True:
    start_time = time.time()
    send_message()
    elapsed_time = time.time() - start_time

    time.sleep(60 - elapsed_time)

Эта версия пытается запускать его каждые 60 секунд, вычитая время выполнения send_message() из спящего режима, так что он начинает выполняться каждые 60 секунд.

Если вам нужен очень точный тайминг, вам понадобится более продвинутая техника.

person Josh Karpel    schedule 05.01.2018