Планирование задачи на питоне

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


person Asaf    schedule 17.05.2010    source источник
comment
Наименее потребляющий? Просьба уточнить   -  person rossipedia    schedule 17.05.2010
comment
Какую операционную систему ты используешь? Если это unix, то ответ, скорее всего, cron...   -  person unutbu    schedule 17.05.2010
comment
Какая платформа? В Unix/Linux механизм at/cron является правильным способом сделать это. В Windows вы должны создать службу, зарегистрировать ее UUID и организовать ее запуск при загрузке, а также отправить своего первенца в Редмонд или что-то в этом роде...   -  person msw    schedule 17.05.2010
comment
Почему вы не используете cron в Linux или at в Windows?   -  person S.Lott    schedule 17.05.2010
comment
ну, я планирую дать это программное обеспечение друзьям на нескольких ОС, поэтому оно не должно быть привязано к конкретной ОС. Я вижу, что никто не подчеркивает, что ответ Брайана в корне неверен с точки зрения процессора, поэтому я буду использовать его.   -  person Asaf    schedule 18.05.2010
comment
вы также можете взглянуть на sched   -  person Amr    schedule 05.06.2012


Ответы (3)


Самый простой способ, о котором я могу думать (в python, поскольку сообщение помечено python):

import time

while True:
  do_task()
  time.sleep(4 * 60 * 60) # 4 hours * 60 minutes * 60 seconds
person rossipedia    schedule 17.05.2010
comment
Хорошо, это работает очень хорошо, однако меня беспокоит используемая мощность процессора, или это в значительной степени доказательство эффективности? - person Asaf; 17.05.2010
comment
доказательство эффективности? Что это значит? Как вы думаете, он использует процессор во время сна? - person S.Lott; 18.05.2010
comment
Можно с уверенностью сказать, что это просто усыпляет процесс. Практически нулевое использование процессора, пока он не проснется. - person rossipedia; 18.05.2010
comment
time.sleep() не является точным. Вы должны использовать time.sleep() в повторяющихся интервалах через цикл, чтобы выполнить проверку, соответствует ли прошедшее время ожидаемому времени. Вы можете использовать time.time(), чтобы получить текущее время, добавить к нему разницу, а затем использовать time.sleep() в цикле, чтобы увидеть, является ли time.time() = ожидаемому времени. Это не предложение для планирования, а простое решение для простых задержек, основанных на времени. На 4 часа expected_time = time.time() + (4 * 60 * 60). - person jetole; 04.08.2019

Вы можете использовать sched модуль

Вот документы

https://docs.python.org/3.4/library/sched.html

person Community    schedule 08.07.2014

Используйте встроенный поток таймера:

from threading import Timer

def function_to_be_scheduled():
   """Your CODE HERE"""

interval = 4 * 60 * 60   #interval (4hours)

Timer(interval, function_to_be_scheduled).start() 
person liuroot    schedule 05.06.2012
comment
Разве function_to_be_scheduled не будет запускаться только один раз? И не повторять каждые 4 часа. - person k0pernikus; 21.02.2013