配置我的Python Flask应用每30秒调用一次函数

时间:2018-08-02 21:04:40

标签: python-3.x flask apscheduler

我有一个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()设置应用程序上下文。见   文档以获取更多信息。

我在做什么错?我将不胜感激。

1 个答案:

答案 0 :(得分:0)

很抱歉,如果这样做可以颠覆问题,但是如果您希望每30秒发送一次用户,则应该在后端进行。后端仅应在发出请求时发出数据。为了定期发送数据,需要将前端配置为定期发送请求

我个人建议将i框架和javascript结合使用,如以下堆栈溢出问题所述: Auto Refresh IFrame HTML

最后,当涉及到您的实际代码时,这里似乎有错误:

if __name__ == "__main__":   
application.run()

“ application.run()”行应缩进,因为它位于if语句中