Col*_*des 6 python flask python-3.x
我有一个可以按照我想要的方式工作的应用程序,但现在我希望它每 5 分钟从一些虚拟机获取实时数据。在下面的代码中,我将其设置为每十秒更新一次,只是为了看看它是否有效,但什么也没有发生。我正在使用 time.sleep。我还缺少什么?
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))
Run Code Online (Sandbox Code Playgroud)
编辑(这是一个带有建议的更新,它仍然无法按照我的意愿工作):编辑2个更多信息:我有一个带有函数grab_cpu的文件,它对虚拟机进行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)
Run Code Online (Sandbox Code Playgroud)
谢谢。
我建议不要使用 Flask 来处理调度。Flask 请求的预期流程是:
上面代码的意图似乎是使用 Flask 将更新推送到浏览器,但是 Flask 只能响应传入的请求,而不能强制浏览器进行更改。
对于您描述的用例,更简单的解决方案是处理浏览器中的刷新逻辑。
对于一个非常基本的示例,请将其放入您的testdoc.html模板中:
<script type="text/javascript">
setTimeout(function () {
location.reload();
}, 10 * 1000);
</script>Run Code Online (Sandbox Code Playgroud)
这将每 10 秒重新加载页面,这将生成一个新的请求到您的 Flask 服务器并在您的浏览器中显示更新的信息。
如果您想要更高级并避免重新加载整个页面,您可以使用 JavaScript XmlHttpRequests或更现代的Fetch API来异步更新页面的特定元素。
另外,以下是 Python 代码的建议简化:
from flask import Flask, render_template
from testapi import grab_cpu
app = Flask(__name__)
build_machines = list(map(lambda i: 'build%02d' % i, range(5, 16)))
win_build_machines = list(map(lambda i: 'winbuild%02d' % i, range(10, 19)))
machines = build_machines + win_build_machines
# Handle HTTP GET requests to / route
@app.route("/", methods=['GET'])
def home():
cpu_percentage = list(map(lambda b: grab_cpu(b), machines))
return render_template('testdoc.html', len = len(machines), machines = machines, cpu_percentage = cpu_percentage)
app.run(use_reloader = True, debug = True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3338 次 |
| 最近记录: |