我有一个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吗?
您可能已经知道了,但这是我的方法。我想给你你的东西
在全球范围内创建应用程序
#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')