我是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()必须是返回语句的一部分。不幸的是,一旦返回被称为游戏结束。
我该怎么做?我认为这只是我的无知。
渲染模板时,您将运行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);
告诉我您是否需要任何帮助。
好的,因此您设法get_stock_price()
每分钟发送一次功能请求。
大。
但是性能如何呢?
我猜您是get_stock_price()
在做其他请求,甚至是进行网络抓取,这对于服务器来说可能真的很困难(想想当10,000个用户使用此页面时会发生什么情况)。
我会做的是:
get_stock_price()
每分钟将数据存储在数据库中(由Cron Job进行),然后当用户要求(AJAX请求)此数据时,将其从数据库中拉出。
这样,服务器将在后台运行,并且用户的数据加载速度不会有任何不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句