当前位置: 首页 > 面试题库 >

在flask应用程序运行后调用函数的正确方法是什么?

程仲卿
2023-03-14
问题内容

我对如何做一些我认为很简单的事情感到困惑。我有一个使用编写的简单应用Flask。看起来像这样:

from flask import Flask

app = Flask(__name__)

def _run_on_start(a_string):
    print "doing something important with %s" % a_string

@app.route('/')
def root():
    return 'hello world'

if __name__ == "__main__":
    if len(sys.argv) < 2:
        raise Exception("Must provide domain for application execution.")
    else:
        DOM = sys.argv[1]
        _run_on_start("%s" % DOM)
        app.run(debug=True)

我发现我的终端_run_on_start以其他Flask应用程序的其他调试代码输出了打印语句,但没有输出。如果我在app.run之前删除呼叫,则输出正常。此外,我发现_run_on_start启动时会重复输出两次,尽管我不知道这是不是很奇怪的输出,或者该函数实际上被调用了两次。

我假设这不是在调用之前添加函数调用的正确方法app.run。我查看了Flask文档,发现提到了可以使用的各种装饰器,这些装饰器允许您在某些请求之前/之后执行功能,但我想在运行应用服务器时执行调用。

此外,我意识到,如果我从另一个模块中调用该模块,即,当__name__ != "__main__"我不调用时,就不会调用该模块_run_on_start

这里正确的方法是什么?在两种情况下,当我都从CL和另一个模块开始时?


问题答案:

重载程序可以解释函数的重复输出。要做的第一件事是在新线程中启动主函数,以便它可以监视源文件并在源文件更改时重新启动线程。使用use_reloader=False选项禁用它。

如果要从其他模块启动服务器时能够运行函数,请将其包装在一个函数中,然后从另一个模块调用该函数:

def run_server(dom):
        _run_on_start("%s" % dom)
        app.run(debug=True, use_reloader=False)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        raise Exception("Must provide domain for application execution.")
    else:
        DOM = sys.argv[1]
        run_server(DOM)

“正确的方法”取决于您实际上要在此处完成的工作。内置服务器用于在将应用程序部署到生产服务器之前在本地测试环境中运行您的应用程序,因此从另一个模块启动它的问题本身并没有多大意义。



 类似资料:
  • 问题内容: 你在哪里存储 用户特定的 和 计算机特定 的运行时 配置数据J2SE应用程序? (例如,在Windows上为 C:\ Users \ USERNAME \ AppData \ Roaming _ ,在Unix上为 / home / username_ ) 如何以独立于平台的方式在文件系统中获取这些位置? 谢谢你的建议! 问题答案: 这取决于您的J2SE应用程序类型: J2SE可执行JA

  • 问题内容: 对于具有所有带有公共静态方法的实用程序类,正确的方法是什么? 我应该使用最终班还是抽象班? 请提出建议。 例如: 要么 问题答案: 有自己的目的。如果您希望其他类()实现某些类功能,则可以使用abstract。 如果它只是实用程序类,但是您不希望其他类将其子类化,那么我将选择类。如果实用程序类只有方法,则您无法以任何方式覆盖它们,因此将它们也包含在类中也没有区别。

  • 问题内容: 我有一个要从数据库动态加载的对象的“库”。每个对象都有其自己的特殊功能,这些功能在特定时间取决于对象类型而被调用。理想情况下,我希望能够做到这一点,尽管有人指出这行不通: 字符串在程序中传递了很多,但是我一次只需要访问对象的某些值,在某些情况下,需要运行特定的函数。问题在于,我正在研究数百个,最终是数千个具有不同功能的潜在对象。 这样存储函数的“正确”方法是什么?我知道在执行过程中调用

  • 问题内容: 我有一个现有的Flask应用程序,并且想找到通往另一个应用程序的路线。更具体地说,第二个应用程序是Plotly Dash应用程序。如何在现有的Flask应用程序中运行Dash应用程序? 我还尝试将路由添加到Dash实例,因为它是Flask应用程序,但出现错误: 问题答案: 从文档: 基本的Flask应用程序可从访问app.server。 你还可以将自己的Flask应用实例传递到Dash

  • 我刚刚遇到了一个奇怪的问题,这是我第一次在服务器上部署spring boot应用程序 像往常一样,我使用java命令java-jar myApp运行应用程序。罐子 过了一会儿,我看到应用程序停止了,没有留下任何错误消息。 所以我不知道问题出在哪里, 可能的原因是java内存不够,所以我将其增加到7GB,因为它有套接字 但问题依然存在 请注意,我没有docker,服务器是Amazon light s

  • 问题内容: 我最近从Angular转到了ReactJs。我正在使用jQuery进行API调用。我有一个API,该API返回要打印在列表中的随机用户列表。 我不确定如何编写我的API调用。最佳做法是什么? 我尝试了以下操作,但未得到任何输出。如果需要,我愿意实现替代API库。 下面是我的代码: 问题答案: 在这种情况下,您可以在中进行ajax调用,然后进行更新