我有一个Flask应用程序,它返回JSON响应。但是,我希望它每30秒调用一次该函数,而无需单击浏览器上的刷新按钮。这是我所做的
使用apscheduler
。这段代码在application.py
中from apscheduler.schedulers.background import BachgroundScheduler
def create_app(config_filname):
con = redis.StrictRedis(host= "localhost", port=6379, charset ="utf-8", decode_responses=True, db=0)
application = Flask(__name__)
CORS(application)
sched = BackgroundScheduler()
@application.route('/users')
@cross_origin()
@sched.scheduled_job('interval', seconds = 20)
def get_users():
//Some code...
return jsonify(users)
sched.start()
return application
然后在我的wsgi.py中
from application import create_app
application = create_app('application.cfg')
with application.app_context():
if __name__ == "__main__":
application.run()
运行此应用程序时,我得到json输出,但在抛出20秒后它不会刷新
RuntimeError:在应用程序上下文之外工作。 这通常意味着您尝试使用所需的功能 以某种方式与当前应用程序对象交互。解决 为此,使用app.app_context()设置应用程序上下文。见 文档以获取更多信息。
我在做什么错?我将不胜感激。
答案 0 :(得分:0)
很抱歉,如果这样做可以颠覆问题,但是如果您希望每30秒发送一次用户,则应该不在后端进行。后端仅应在发出请求时发出数据。为了定期发送数据,需要将前端配置为定期发送请求
我个人建议将i框架和javascript结合使用,如以下堆栈溢出问题所述: Auto Refresh IFrame HTML
最后,当涉及到您的实际代码时,这里似乎有错误:
if __name__ == "__main__":
application.run()
“ application.run()”行应缩进,因为它位于if语句中