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