如何运行需要app_context的apscheduler作业

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

我有一个flask应用程序,需要将某些方法作为后台任务运行。我一直在尝试使用apscheduler。不需要app_context的后台任务可以毫无问题地运行,但是,需要app_context的任务始终会引发错误:

RuntimeError: Working outside of application context.

我尝试了各种选择。1.我已将app传递给工作,并更改了所有工作以接受app作为参数。

我试图通过以下操作强制后台任务启动应用程序:

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

两个选项似乎都没有设法获取app_context。还有其他方法可以强制后台任务具有app_context吗?

python flask apscheduler
1个回答
0
投票

您可能已经知道了,但这是我的方法。我想给你你的东西

在全球范围内创建应用程序

#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_conext()

调用模块中的方法
from flask import current_app as app

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

def job2():
     app.logger.info('Job2')
© www.soinside.com 2019 - 2024. All rights reserved.