What's the right approach for calling functions after a flask app is run?

后端 未结 3 1173
孤城傲影
孤城傲影 2020-12-08 09:56

I\'m a little confused about how to do something that I thought would be quite simple. I have a simple app written using Flask. It looks something like this:

相关标签:
3条回答
  • 2020-12-08 10:23

    Probably you were looking for Flask.before_first_request decorator, as in:

    @app.before_first_request
    def _run_on_start(a_string):
        print "doing something important with %s" % a_string
    
    0 讨论(0)
  • 2020-12-08 10:25
    from flask import Flask
    
    def create_app():
        app = Flask(__name__)
        def run_on_start(*args, **argv):
            print "function before start"
        run_on_start()
        return app
    
    app = create_app()
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    0 讨论(0)
  • 2020-12-08 10:27

    The duplicate output from your function can be explained by the reloader. The first thing it does is start the main function in a new thread so it can monitor the source files and restart the thread when they change. Disable this with the use_reloader=False option.

    If you want to be able to run your function when starting the server from a different module, wrap it in a function, and call that function from the other module:

    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)
    

    The "right approach" depends on what you're actually trying to accomplish here. The built-in server is meant for running your application in a local testing environment before deploying it to a production server, so the problem of starting it from a different module doesn't make much sense on its own.

    0 讨论(0)
提交回复
热议问题