Есть ли способ проанализировать время, чтобы он выполнял код только один раз в заданный период времени?

avatar
CryPtoSmartGuy420
8 августа 2021 в 21:24
41
1
-1

Допустим, я слушаю, произошло ли случайное событие. (В частности, я делаю это через веб-перехватчик. После получения веб-перехватчика я выполняю код)

Я не хочу, чтобы мое событие веб-перехватчика выполняло код более одного раза в заданный период времени, например. 30 минут. Однако я не имею в виду это так:

"Received webhook?" 
"Wait 30 minutes until you can listen to webhooks again." 

Каким-то образом я хотел бы разделить 24 часа дня на 48 частей по 30 минут, и тогда веб-перехватчик может активировать это событие> только один раз в заданном <70493600 часть. [для уточнения: если бы это было 20 минут, то было бы 72 части 20 минут]

Например: Код активируется в 14:21. Следующий возможный раз, когда я хочу, чтобы он активировался, будет в 14:30. До 14:30 я не хочу, чтобы код активировался больше, чем он уже сделал (один раз). Потом опять с 14:30 до 15:00, хочу активировать максимум один раз и так далее.

Мне не обязательно так делить день, я просто пытаюсь объяснить, что мне нужно.

Надеюсь, я ясно объяснил.

Источник

Ответы (1)

avatar
chepner
8 августа 2021 в 21:44
1

Допустим, у вас есть две функции enable и disable, которые позволяют включать и отключать веб-перехватчик. Начните с добавления обработчика сигнала для SIGALRM, который активирует хук:

signal.signal(signal.SIGALRM, lambda: enable())

При срабатывании хука вы можете сделать следующее:

disable()
signal.alarm(1800)

Это отключит ваш хук и потребует, чтобы ваша программа получила сигнал SIGALRM через 30 минут. Когда сигнал поступит, ваш обработчик вызовет enable, чтобы включить ваш веб-хук.