我有一个返回JSON响应的flask应用程序。但是,我希望它每隔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()设置应用程序上下文。有关详细信息,请参阅文档。
我做错了什么?如果有任何建议,我将不胜感激。
发布于 2018-08-03 05:36:41
如果这在某种程度上颠覆了问题,很抱歉,但如果您希望用户每30秒发送一次,这可能不应该在后端完成。后端应该只在发出请求时发送数据。为了定期发送数据,需要将前端配置为以定期间隔发出请求
就我个人而言,我建议使用i-frame和javascript的组合来实现这一点,如下面的堆栈溢出问题所述:Auto Refresh IFrame HTML
最后,当涉及到您的实际代码时,这里似乎有一个错误:
if __name__ == "__main__":
application.run()
"application.run()“行应该缩进,因为它在if语句中
https://stackoverflow.com/questions/51662155
复制相似问题