Apscheduler cron для запуска через полчаса

Я хочу иметь задание cron, которое работает на основе времени открытия и закрытия фондового рынка (8:30-3 CST). Я хочу, чтобы он запускался каждые 15 минут, начиная с 8:30.

В настоящее время у меня есть

sched.add_job(scheduled_task,'cron',
   day_of_week='mon-fri', hour='8-15', 
   minute=enter code here'0-59/15', 
   timezone='America/Chicago')

Это позволяет мне бегать с 8:00 до 15:00 каждые 15 минут, что не совсем то, что мне нужно. Я также пробовал следующее:

sched.add_job(scheduled_task,'cron',
   day_of_week='mon-fri', hour='12-20',     
   minute='30/15', 
   timezone='America/Chicago')

Это приближает меня, но работает только на 30 и 45 минутах.


person Football52    schedule 17.09.2019    source источник


Ответы (2)


Решение состоит в использовании OrTrigger:

from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.combining import OrTrigger

cron1 = CronTrigger(day_of_week='mon-fri', hour='8', minute='30,45', timezone='America/Chicago')
cron2 = CronTrigger(day_of_week='mon-fri', hour='9-15', minute='*/15', timezone='America/Chicago')
trigger = OrTrigger([cron1, cron2])
sched.add_job(scheduled_task, trigger)
person Alex Grönholm    schedule 17.09.2019
comment
Интересно, попробую - person Football52; 18.09.2019

Я бы сказал, запускайте вашу задачу cron каждые 15 минут и просто пропускайте выполнение вашего кода, когда текущее время дня до 8:30 (8 * 60 + 30)

import datetime
from apscheduler.scheduler import Scheduler

cron = Scheduler(daemon=True)
cron.start()

@cron.interval_schedule(minutes=15)
def job_function():
    now = datetime.datetime.now()
    if (now.hour * 60 + now.minute) > 8 * 60 + 30:
        return

    # code to execute
person Jop Knoppers    schedule 17.09.2019
comment
Это было моим быстрым решением, если я не мог найти и ответить за то, что пытался сделать. - person Football52; 18.09.2019