我是Python Flask的新手,并且需要一些有关如何将Signals
与Flask
一起使用的信息/基础知识。
到目前为止,我的理解:
我可以创建并发送自己的信号。我可以使用此信号进行函数调用。
我的烧瓶应用程序看起来像这样:
@app.route("/")
def start():
return render_template('index.html')
@app.route("/search")
def search():
rThread = threading.Thread(target=getTags)
rThread.start()
return redirect(url_for('search'))
rThread中的getTags
在应用程序之外执行某些操作。
但基本上看起来像这样:
def getTags():
#do something#
#now its finished#
我想在完成getTags之后发送一个信号,Flask
应用程序应该获得该信号并重定向到index.html。
我一直坚持要创建信号,但是我不知道如何发送信号,以及如何告知flask应用程序如果发送了信号,将重定向到index.html。
感谢您的帮助和建议。
编辑:为澄清起见,用户可以访问更多页面。
@app.route("/details")
def det():
#do stuff
return render_template('details.html')
@app.route("/admin")
def adm():
if request.method == "GET":
#do Stuff
return redirect(url_for('search'))
else
#do Stuff
return render_template("admin.html")
答案 0 :(得分:0)
如果您只想等待某个函数完成其工作,则只需调用该函数,然后对其进行响应即可。您使用了threading.thread
,因此可以使用threading.Event
并等待该函数设置事件:
from flask import Flask, render_template, url_for, redirect
from threading import Thread, Event
from time import sleep
app = Flask(__name__)
event = Event()
@app.route("/")
def start():
render_template('index.html')
@app.route("/search")
def search():
rThread = Thread(target=getTags)
rThread.start()
event.wait()
event.clear()
return redirect(url_for('start'))
def getTags():
print("doing some processing things")
sleep(5)
print("done")
event.set()
if __name__ == "__main__":
event.clear()
app.run(host="localhost", port="8080", debug=True)
答案 1 :(得分:0)
网络服务器无法在客户端或网络浏览器中触发事件。 编写一个运行一定时间间隔并从服务器获取数据的Java脚本函数,然后如果需要结果,则可以重定向到另一页。