如何每分钟调用一次render_template()

时间:2014-06-20 23:33:15

标签: python-2.7 flask

我是Flask的新手。如何通过不断变化的数据为给定页面每分钟调用一次render_template('prices.html',stock_price)?

我试过了:

throttle.Throttle(period=60) # 60 second throttle
while True:
   stock_price = get_stock_price()
   render_template('prices.html', stock_price=stock_price)
   throttle.check() # Check if 60 seconds have passed otherwise sleep

唯一可行的是return render_template(...)。显然,render_template()必须是return语句的一部分。不幸的是,一旦回归被称为游戏结束。

我如何做到这一点?我认为这只是我的无知。

1 个答案:

答案 0 :(得分:3)

渲染模板时,运行Flask进程并在呈现模板文件后返回HTML,如您所说,使用return并且游戏结束。

即使你会发现一种真正的硬编码方式,它也不是一个好方法。您将浪费太多服务器呼叫和用户等待时间

简单的方法

编写一个非常简单的Python函数,只返回股票编号(我猜你已经有一个 - get_stock_price()) 但我会用路线装饰它(让我们说“ / getprice ”)。每个到达此页面的人都将获得一个黑色页面,但是股票价格文本。

现在真正的魔术 - 在HTML页面上使用JQuery-AJAX来调用这个函数:

$.ajax({
  type: "POST",
  url: "/getprice",
})
  .done(function( price ) {
    $("#price-box").val(price)
  });

嘿,等等,我的“每分钟一次”怎么办?

诅咒我们可以将这个ajax调用插入到setInerval()函数中,如下所示:

setInterval(function() {
    $.ajax({
      type: "POST",
      url: "/getprice",
    })
      .done(function( price ) {
        $("#price-box").val(price)
      });
}, 1000 * 60); 

告诉我你是否需要任何帮助。

Pro方式

好的,所以你设法每分钟发送一次get_stock_price()功能请求。

大。

但是性能呢?

我猜你的get_stock_price()正在做一些其他的请求,甚至还有一些网络抓取,这对服务器来说真的很难(想想当10,000名用户使用这个页面时会发生什么)。

我要做的是:

每分钟将数据从get_stock_price()存储到您的数据库中(Cron Job将完成工作),然后当用户询问(AJAX请求)此数据时,将其从数据库中取出。< / p>

这样服务器将在后台运行,用户不会看到他的数据加载速度有任何不同。