Ваша four_hour
функция может быть повышение исключение до тогоthreading.Timer().start()
вызывается снова:
import threading
import logging
logger = logging.getLogger(__name__)
def five_min():
t = threading.Timer(5, five_min).start()
logger.info("5 min")
def four_hour():
1/0 # <-- Raise an exception
threading.Timer(4, four_hour).start()
logger.info("4 h")
logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s %(threadName)s] %(message)s',
datefmt='%M:%S')
five_min()
four_hour()
дает
[57:54 MainThread] 5 min
Traceback (most recent call last):
File "script.py", line 21, in <module>
four_hour()
File "script.py", line 12, in four_hour
1/0
ZeroDivisionError: integer division or modulo by zero
[57:59 Thread-1] 5 min
[58:04 Thread-2] 5 min
...
(Примечание: Я изменил задержки так, что сценарий легче проверить. Как только вы находитесь , удовлетворенный качественным поведением сценария, вы можете задержать, как вы, желание.)
Примечания: as clemtoy points out как пор, пока нет необходимости в межпоточный или связи между процессами, это может быть проще use cron называть отдельных сценариев, которые работают в five_min
и four_hour
функции. Если вы делаете , вам нужна межпроцессная связь, но может быть лучше использовать cron, но вы должны были бы структурировать свой код по-разному, возможно, чтение из базы данных до узнать состояние прежних глобальных переменных.
Вы можете определить функции, имена которых начинаются с числа? – khelwood
Разве вы не должны ждать 4 часа после прямого вызова первой функции перед прямым вызовом второго? – martineau
Возможный дубликат [Python threading.timer - функция повтора каждые 'n' секунд] (http://stackoverflow.com/questions/12435211/python-threading-timer-repeat-function-every-n-seconds) – wwii