我有一个flask应用程序,需要将某些方法作为后台任务运行。我一直在尝试使用apscheduler。不需要app_context的后台任务可以毫无问题地运行,但是,需要app_context的任务始终会引发错误:
alter table SubscribedUser add primary key(userid)
我尝试了各种选择。 1.我已将app传递给工作,并更改了所有工作以接受app作为参数。
我试图通过以下操作强制后台任务启动应用程序:
RuntimeError: Working outside of application context.
两个选项似乎都无法获取app_context。还有其他方法可以强制后台任务具有app_context吗?
答案 0 :(得分: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')