我正在开发一个小型 python/flask 项目,该项目将繁重的计算例程与浏览器界面连接起来。出于实际原因,我必须将计算保留在后台进程中,并在计算完成时重新加载/重定向页面(包含输出结果)。以下是我迄今为止所拥有的最小代码(按相反顺序):
interface.py
from flask import Flask
from threading import Thread
import time
app = Flask(__name__)
# step 4: rerender browser with output data
@app.route('/done')
def done(data_to_pass):
# rerender browser's html here?
print data_to_pass
return data_to_pass
# step 3: heavy computation routine
def background():
print "start runing backgroun process"
time.sleep(3) # simulate heavy computation routine
data = 'done from background'
done(data)
# step 2: initiate background process
def init():
t = Thread(target=background)
t.daemon = True
t.start()
# step 1: home interface
@app.route('/')
def front_end():
init()
return 'initiate bachground process'
if __name__ == '__main__':
app.run()
当 interface.py
正在运行,访问127.0.0.1:5000得到一个字符串initiate bachground process
在浏览器中。但是,最终数据(本例中为字符串 done from background
)仅在服务器终端中处理,而不是在浏览器中处理。
我相信这个过程对于大多数服务器来说都是常见的,但我找不到任何 flask 解决方案......或者我走错了方向?
最佳答案
如果您想知道该过程何时完成,我建议使用以下之一:
- 长轮询
- WebSocket
但是您可以重新加载整个页面:
window.location.reload()
最好从服务器仅返回后台进程的结果并仅更新页面的相关片段。
关于python - 如何调用 python/flask 服务器从服务器端功能重新加载客户端页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33778042/