python - 在将 Signals 与 Python Flask 结合使用方面需要帮助

标签 python redirect flask raspberry-pi signals

我是 Python Flask 新手,需要一些有关如何将 SignalsFlask 结合使用的信息/基本知识。 目前我的理解:

我可以创建并发送自己的信号。我可以使用这个信号来进行函数调用。

我的 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")

最佳答案

如果您只想等待函数完成其工作,您可以简单地调用该函数,然后在其后响应。您使用了 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)

关于python - 在将 Signals 与 Python Flask 结合使用方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54644416/

相关文章:

java - Spring MVC - JSTL - session 属性

python - 将自定义信号处理程序与 gunicorn 结合使用

python - SqlAlchemy 加入没有外键的表

python - 按类别对计数进行分组

python - 类数,4,与 target_names 的大小不匹配,6。尝试指定标签参数

python - 当线程完成时,如何更改 Flask 中渲染的模板?

javascript - 如何在 10 个点后从图中删除旧数据点?

c# - 如何使用 IronPython 中的包调用 Python 脚本?

redirect - 具有重写功能的 IIS 反向代理无法处理来 self 们代理到的服务器的重定向

redirect - 如何强制将所有 404(或每个页面,无论是否无效)重定向到主页?