使用常规收集和更新的数据回答请求

时间:2016-01-02 23:35:58

标签: flask

我试图使用flask回答http请求,但是收集和计算我想要传递给客户端的数据的过程需要很长时间才能让客户端等待。计算每个请求已经是最新的信息也是低效的。我尝试使用线程和烧瓶来定期更新我的数据并将其发送到客户端,因为它在每个请求的内存中。不幸的是,发生了很多问题,多个线程运行,应用程序经常重启,这迫使我重新计算数据。我正在寻找一个带烧瓶的解决方案,它提供了一种定期运行代码的方法,并确保应用程序不会经常重启。

from flask import Flask, jsonify
app = Flask(__name__)

def function_that_magically_runs_regularily_and_in_an_own_thread():
    global data
    data = expensive_update(data)

@app.route("/get_data")
def get_data():
    return jsonify(data)

data = Data()
function_that_magically_runs_regularily_and_in_an_own_thread()

if __name__ == "__main__":
    app.run(debug=True)

1 个答案:

答案 0 :(得分:0)

您想要使用像APScheduler

这样的进程内cron
from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

# Run background_work every 15 minutes
# only allowing one instance to run at a time
@scheduler.schedule_job('interval', max_instances=1, minutes=15)
def background_work():
    global data
    data = expensive_update(data)

data = Data()
background_work()  # Run it once to populate the data

if __name__ == "__main__":
    scheduler.start()
    app.run(debug=True)