【问题标题】:Apscheduler cron to start on the half hourApscheduler cron 在半小时内启动
【发布时间】:2020-01-18 07:53:00
【问题描述】:

我希望有一个基于股市开盘和收盘时间 (8:30-3 CST) 运行的 cron 作业。我希望它每 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')

这让我可以每 15 分钟运行一次上午 8 点到下午 3 点,这并不是我想要的。我还尝试了以下方法:

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

这让我更接近,但只在 30 和 45 分钟运行。

【问题讨论】:

    标签: python cron scheduled-tasks apscheduler


    【解决方案1】:

    解决方法是使用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)
    

    【讨论】:

    • 有意思,我试试这个
    【解决方案2】:

    我会说每 15 分钟运行一次你的 cron 任务,当当前时间在 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
    

    【讨论】:

    • 如果我无法找到并回答我正在尝试做的事情,这是我的快速解决方案。
    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多