在Flask(烧瓶工厂)中使用Apscheduler添加Cron作业

时间:2020-06-03 11:32:08

标签: python-3.x flask cron flask-sqlalchemy apscheduler

同志们。我试图添加一个cron作业来定期调用我的cron_job_notes_recall函数,但是Flask给出了一个错误:

No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

好吧,我遵循了 Flask Factory 的方法,并且所有内容都在 init .py中进行了初始化,因此我决定从这里开始工作。我非常确定该函数可以正常工作,因为我将其作为路由放入了函数中并调用了它。我想问题可能是由数据库(?)引起的。该函数只是对数据库进行查询,如果查询返回了某些内容,则该查询将在上面进行初始化,然后再发送电子邮件。您是否知道我的cron作业应该在哪里初始化?

初始化 .py

# Globally accessible libraries
db = SQLAlchemy()
login_manager = LoginManager()

sched = BlockingScheduler()


def create_app(test_config=False):
    """Initialize the core application."""
    logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.INFO)

    app = Flask(__name__, instance_relative_config=False)
    if not test_config:
        app.config.from_object('config.Config')
        pprint(app.__dict__)
    else:
        app.config.from_object('config.TestConfig')
        app.config.update(
            BCRYPT_LOG_ROUNDS=4,
            HASH_ROUNDS=1,
            LOGIN_DISABLED=True,
            WTF_CSRF_ENABLED=False,
            SECRET_KEY=os.urandom(25),
            TESTING=True
        )

    db.init_app(app)
    login_manager.init_app(app)

    with app.app_context():

        # Include our Routes
        from flask_bootstrap import Bootstrap
        from . import routes
        from . import auth

        # Register Blueprints
        app.register_blueprint(auth.auth_bp)
        Bootstrap(app)
        db.create_all()


        # HERE IS MY CRON JOB
        sched.add_job(cron_job_notes_recall, 'interval', seconds=1)
        sched.start()

        try:
            return app, logging
        except:

1 个答案:

答案 0 :(得分:0)

我也在搜索问题答案。尚无解决方案,仅提供一些建议:问题根源为'This happens because the data are lost when the context (with app.app_context()) ends' 将Redis用作外部上下文storage

的可能解决方案之一