Я пытаюсь заставить функцию таймера работать в Python (в настоящее время Python 2.7).
Вот что у меня есть до сих пор. Я борюсь с проблемой потоковой передачи и сбросом таймера.
from threading import Timer
def api_call():
print("Call that there api")
t = Timer(10.0,api_call)
def my_callback(channel):
if something_true:
print('reset timer and start again')
t.cancel()
t.start()
print("\n timer started")
elif something_else_true:
t.cancel()
print("timer canceled")
else:
t.cancel()
print('cancel timer for sure')
try:
if outside_input_that_can_happen_a_lot:
my_callback()
finally:
#cleanup objects
По сути, my_callback()
может вызываться очень много раз очень быстро и может попасть в любую часть операторов "if", "elif" или "else".
Проблема, с которой я сталкиваюсь, заключается в том, что когда переменная something_true
имеет значение true, она запускает таймер. Что прекрасно работает в первый раз. Каждый раз после того, как он вызывается, я получаю сообщение об ошибке потоковой передачи, говорящее мне, что для таймера можно использовать только один поток.
По сути, я хочу иметь возможность сбросить свой таймер при первом «если» и отменить, если «элиф» или «еще» нажаты.