Python 如何使flask应用程序每5分钟运行一次?
我有这个应用程序,它可以按照我想要的方式工作,但现在我希望它每5分钟从一些虚拟机抓取一次实时数据。在下面的代码中,我将它设置为每10秒更新一次,只是为了看看它是否有效,但什么都没有发生。我在利用时间睡觉。我还缺什么Python 如何使flask应用程序每5分钟运行一次?,python,python-3.x,flask,Python,Python 3.x,Flask,我有这个应用程序,它可以按照我想要的方式工作,但现在我希望它每5分钟从一些虚拟机抓取一次实时数据。在下面的代码中,我将它设置为每10秒更新一次,只是为了看看它是否有效,但什么都没有发生。我在利用时间睡觉。我还缺什么 import time from flask import Flask, render_template from testapi import grab_cpu app = Flask(__name__) starttime = time.time() while True:
import time
from flask import Flask, render_template
from testapi import grab_cpu
app = Flask(__name__)
starttime = time.time()
while True:
machines =["build05", "build06", "build07","build08", "build09", "build10", "build11", "build12","build14","build15", "winbuild10","winbuild11", "winbuild12", "winbuild13", "wbuild14", "wbuild15", "winbuild16", "winbuild17", "winbuild18"]
cpu_percentage =[grab_cpu("build05"), grab_cpu("build06"),grab_cpu("build07"),
grab_cpu("build08"), grab_cpu("build09"), grab_cpu("build10"), grab_cpu("build11"), grab_cpu("build12"), grab_cpu("build13"), grab_cpu("build14"), grab_cpu("build15"), grab_cpu("winbuild10"), grab_cpu("winbuild11"), grab_cpu("winbuild12"), grab_cpu("winbuild14"), grab_cpu("winbuild15"), grab_cpu("winbuild16"), grab_cpu("winbuild17"), grab_cpu("winbuild18")]
@app.route("/") # this sets the route to this page
def home():
return render_template('testdoc.html', len = len(machines), machines = machines, cpu_percentage = cpu_percentage)
app.run(use_reloader = True, debug = True)
time.sleep(10.0 - ((time.time() - starttime) % 10.0))
编辑(这是一个更新的建议,它仍然没有工作,因为我想):
编辑另外2条信息:我有一个文件,其中有一个函数grab_cpu,它对vm进行api调用并返回使用率百分比。我有另一个名为test doc.html的文件,它只显示html。从这些回答中,我猜我需要使用一些javascript和带有套接字的东西。有人能给我一个链接指出正确的方向吗
import time
from flask import Flask, render_template
from testapi import grab_cpu
app = Flask(__name__)
@app.route("/") # this sets the route to this page
def home():
starttime = time.time()
while True:
machines =["build05", "build06", "build07","build08", "build09", "build10", "build11", "build12","build14","build15", "winbuild10","winbuild11", "winbuild12", "winbuild13", "wbuild14", "wbuild15", "winbuild16", "winbuild17", "winbuild18"]
cpu_percentage =[grab_cpu("build05"), grab_cpu("build06"),grab_cpu("build07"),
grab_cpu("build08"), grab_cpu("build09"), grab_cpu("build10"), grab_cpu("build11"), grab_cpu("build12"), grab_cpu("build13"), grab_cpu("build14"), grab_cpu("build15"), grab_cpu("winbuild10"), grab_cpu("winbuild11"), grab_cpu("winbuild12"), grab_cpu("winbuild14"), grab_cpu("winbuild15"), grab_cpu("winbuild16"), grab_cpu("winbuild17"), grab_cpu("winbuild18")]
return render_template('testdoc.html', len = len(machines), machines = machines, cpu_percentage = cpu_percentage)
time.sleep(10.0 - ((time.time() - starttime) % 10.0))
app.run(use_reloader = True, debug = True)
以下是网页:
谢谢。您的代码需要一些工作,Flask视图不应该在循环中声明。我建议如下:
- 这不完全是您的代码
- 您的代码工作得很好,但缺少此实现
- 您的项目具有一定程度的复杂性
- 您需要在其他地方显示此数据
我建议不要使用Flask来处理调度。烧瓶要求的预期流量为:
testdoc.html
模板中:
setTimeout(函数(){
location.reload();
}, 10 * 1000);
不要这样做。将您的查询移动到home
路径中,并将其移动到redis或类似的缓存系统后面,以避免多次运行这种昂贵的操作。我看不出您使用的是任何公认的设计模式。1.拥有一个控制器进程,可以在flask应用程序中调用restful API路由,更新缓存(例如redis)2。主路径通过使用渲染模板从缓存中获取数据来显示数据。3.如果您希望客户端浏览器以不同的频率刷新页面,请使用一点JS和重新加载的setinterval()
page@RobRaymond我想我不是。我两天前才学会烧瓶。还在学习。谢谢你的建议。@AdamSmith你是说移动我的变量?哪项手术费用昂贵?我假设每次调用grab_cpu()都是。我很困惑为什么你不相信这是我的代码……Python语法中的基本错误让我认为这不是你的产品代码@ColorfulCodesI最终使用了除flask之外的另一种方法来获得我想要的结果,但我很欣赏这种解释。非常感谢。