Если я правильно выполнил ваши требования, вероятно, вам нужен цикл, который будет повторно вводить задачу в очередь каждый раз, когда она будет выполняться. Что-то вроде:
# This code assumes you have created a function called "func"
# that returns the time at which the next execution should happen.
s = sched.scheduler(time.time, time.sleep)
while True:
if not s.queue(): # Return True if there are no events scheduled
time_next_run = func()
s.enterabs(time_next_run, 1, <task_to_schedule_here>, <args_for_the_task>)
else:
time.sleep(1800) # Minimum interval between task executions
Однако использование планировщика - IMO - излишнее. Использование объектов datetime может быть достаточным, например, базовая реализация будет выглядеть так:
from datetime import datetime as dt
while True:
if dt.now().hour in range(start, stop): #start, stop are integers (eg: 6, 9)
# call to your scheduled task goes here
time.sleep(60) # Minimum interval between task executions
else:
time.sleep(10) # The else clause is not necessary but would prevent the program to keep the CPU busy.
НТН!