Flask上的APScheduler拾取数据并将其保存在不保存的地方

问题描述 投票:1回答:1

使用Flask,SQLAlchemy,我正在制作一个网站,并且具有汇总股票价格的功能。我想使用APScheduler将数据保存在Postgres中。但我也希望它从停下来的地方开始。

由于服务器仅在本地计算机上,因此它并不总是在运行。如果我在星期三的星期三关闭它,并在星期一重新打开它,我希望它立即从星期三获取并保存数据。

根据APScheduler的文档,我认为只要服务器始终在运行,此功能就应该运行。

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()   

def save_stock_price():
    """save stock prices to psql db"""
    tickers = all_tickers()
    stock_prices = fetch_all(tickers)
    data = StockPrice(data=stock_prices)
    try:
        data.save() # runs db.session.add(self), db.session.commit()
    except (KeyError, RuntimeError):
        pass

def schedule_stock_price(scheduler):
    """1600, weekdays"""
    scheduler.add_job(id='Scheduled task3',
                  func=save_stock_price,
                  trigger='cron',
                  day_of_week='mon-fri',
                  hour='16',
                  minute=1,
                  timezone='EST'
                  )
    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass


schedule_stock_price(scheduler)

但是设置为在工作日每天一次,以16:01运行。

如何使它从停下来的地方捡起并填补空白?

python flask flask-sqlalchemy apscheduler
1个回答
0
投票

从设计模式的角度来看,您可能是从错误的角度来解决这个问题。计划的作业是无状态的,因为它要么“应该在此刻运行”,否则不应。为了使其“填补空白”,您将不得不引入另一个过程。如果有第二个计划任务,其主要工作是确定是否有几天缺少数据,然后出去然后取数据,该怎么办?一个简化的过程可能是这样的

  • 日常流程(称为流程A)设置为每天在指定时间运行。执行时,它将行写入包含股票价格的数据库。
© www.soinside.com 2019 - 2024. All rights reserved.