【问题标题】:Python Flask: What happens in the background and how to call some function only once?Python Flask:后台发生了什么以及如何只调用一次函数?
【发布时间】:2021-04-11 21:58:54
【问题描述】:

我已经使用 Flask 很长时间了,但显然是盲目的。我正在运行的应用程序托管在 App Engine 中,并且运行良好。今天我遇到了一个让我思考 Flask 和 App Engine 是如何工作的情况。这是我的应用的结构:
app.py

from flask import Flask

app = Flask(__name__)

@app.route('/', method=['GET', 'POST'])
def f1():
.
.
.
def f2():
.
.
.
if __name__=='__main__':
    app.run(debug=True)

应用程序的许多部分与我的问题无关。我知道每当有 GET/POST 请求时,都会调用 f1()。那么当我在 App Engine 中部署应用程序时,后台到底发生了什么?假设我只想调用 f2() 一次,从 API 中检索一些数据并在 f1() 中使用该数据。我可以在 main() 中调用它并将其保存到全局变量中吗?或者我该怎么做?我正在尝试优化数据库和 API 调用以使应用程序更快,这就是只调用一次 f2() 的原因。
希望对相关资源进行一些澄清或参考以解决我的问题。

【问题讨论】:

    标签: python google-app-engine flask python-requests


    【解决方案1】:
    @app.route('/', method=['GET', 'POST'])
    def f1():
    

    你的函数有一个装饰器@app.route。这将绑定您的函数f1。你的函数可以有 n 个装饰器。如果您想调用f2 函数,您可以在脚本末尾调用,并将其用作全局变量。

    a = ''
    
    @app.route('/', method=['GET', 'POST'])
    def f1():
        global a
    .
    .
    .
    def f2():
       global a
    .
    .
    .
    
    f2()
    
    if __name__=='__main__':
        app.run(debug=True)
    

    我的建议是在f2 中添加一个装饰器,以便您在将来需要更改全局数据时再次调用该函数。

    @app.route('/some_secret_address', method=['GET', 'POST'])
    def f2():
        global a
    

    【讨论】:

    • 这是我在应用中使用的一种非常有用的做法。
    • 我将深入了解如何在函数中使用装饰器。通常,我会创建一个包含一些功能的新文件,然后将它们导入并使用它们。这是一种不好的做法吗?
    • 这是一个很好的做法。它将帮助您轻松调试。试试 Flask 蓝图。
    猜你喜欢
    • 2011-09-19
    • 2019-10-24
    • 2019-02-22
    • 2016-09-30
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多