如何运行需要app_context的apscheduler作业

时间:2018-10-01 08:42:46

标签: python flask apscheduler

我有一个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吗?

1 个答案:

答案 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')