使用Flask的应用上下文(application context)来管理APScheduler的实例对象。在每个请求中创建APScheduler的实例对象,并将其存储在应用上下文中,以便在整个应用程序中重复使用。以下为示例代码:
from flask import Flask, g
from apscheduler.schedulers.background import BackgroundScheduler
app = Flask(__name__)
def get_scheduler():
if 'scheduler' not in g:
g.scheduler = BackgroundScheduler()
return g.scheduler
@app.before_first_request
def start_scheduler():
scheduler = get_scheduler()
# 添加定时任务
scheduler.add_job(...)
@app.before_request
def setup_scheduler():
scheduler = get_scheduler()
if not scheduler.running:
scheduler.start()
@app.teardown_appcontext
def teardown_scheduler(exception):
scheduler = g.pop('scheduler', None)
if scheduler:
scheduler.shutdown()
@app.route('/')
def index():
# 处理请求
...
if __name__ == '__main__':
app.run()
在上面的示例中,get_scheduler()
方法用于获取APScheduler的实例对象。如果当前请求中没有保存实例对象,则创建一个新的实例对象,并将其存储在应用上下文中。start_scheduler()
方法在应用程序启动时调用,用于添加定时任务并启动调度器。setup_scheduler()
方法在每个请求开始时调用,用于启动调度器,以便定时任务可以运行。teardown_scheduler()
方法在每个请求结束时调用,用于关闭调度器。最后,index()
方法是用于处理请求的视图函数。