Python 如何运行需要应用程序上下文的apscheduler作业

Python 如何运行需要应用程序上下文的apscheduler作业,python,flask,apscheduler,Python,Flask,Apscheduler,我有一个flask应用程序,它需要运行一些方法作为后台任务。我一直在尝试使用apscheduler。不需要app_上下文的后台任务运行时不会出现问题,但是,需要app_上下文的任务始终会抛出错误: RuntimeError: Working outside of application context. 我尝试过各种选择。 1.我已将应用程序传递到作业中,并更改了所有作业以接受应用程序作为参数 我已尝试强制后台任务启动具有以下内容的应用程序: class APScheduler(_BaseAP

我有一个flask应用程序,它需要运行一些方法作为后台任务。我一直在尝试使用apscheduler。不需要app_上下文的后台任务运行时不会出现问题,但是,需要app_上下文的任务始终会抛出错误:

RuntimeError: Working outside of application context.
我尝试过各种选择。 1.我已将应用程序传递到作业中,并更改了所有作业以接受应用程序作为参数

我已尝试强制后台任务启动具有以下内容的应用程序:

class APScheduler(_BaseAPScheduler):
    def start(self):
        app = create_app()
        apply_config(app)
        with app.app_context():
            super().start()

这两个选项似乎都无法获取应用程序上下文。有没有其他方法可以强制后台任务使用app_上下文?

您可能已经找到了答案,但下面是我的方法。我想告诉你什么是你的

在全局上下文中创建应用程序

#Let BackgroundJobs be A module having all logics of batch jobs
from BackgroundJobs import BatchJobs 
app = Flask(__name__)

def job1():
     with app.app_context():
          BatchJobs.job1()

def job2():
     with app.app_context():
          BatchJobs.job2()



scheduler = BackgroundScheduler()
scheduler.add_job(job1, 'interval', minutes=5)
scheduler.add_job(job2, 'interval', minutes=5)

scheduler.start()
if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=False)


在BackgroundJobs.py中,您必须使用以下命令将代理导入应用程序。要使app可用,我们应该使用app.app_conext()调用模块中的方法

from flask import current_app as app

def job1():
     app.logger.info('Job1')

def job2():
     app.logger.info('Job2')