我正在研究一個小型的python/flask項目,它將一個繁重的計算例程與瀏覽器界面連接起來。出於實際的原因,我必須將計算保留在後臺進程中,並在計算完成時重新加載/重定向頁面(以及輸出結果)。以下是我迄今爲止最小的代碼(按照相反的順序):如何調用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
)只能在服務器的終端中處理,而不能在瀏覽器中處理。
我相信這個程序通常是爲大多數服務器完成的,但是我找不到任何燒瓶解決方案......或者我走錯了方向?
當你點擊你的'/ done'路徑時會發生什麼? –
你的意思是直接從瀏覽器訪問127.0.0.1:5000/done嗎?在這個設置下,'done'需要函數調用的輸入參數。因此直接從地址127.0.0.1:5000/done訪問它會導致內部服務器錯誤。 – SamKChang
你打算使用'/ done'路由進行輪詢嗎?所以你首先請求'/',然後每隔一段時間調用'/ done',直到它返回一些東西? –