简体   繁体   中英

Waitress serve takes too long to run flask server

I am trying to run a flask app with waitress serve, but when i call "python app.py" nothing happens (i waited 2 minutes then ctrl+c). When i run flask with app.run() everything works normally. Some help would be appreciated

import Flask
from waitress import serve

app=Flask(__name__)
<My code>
if __name__ == "__main__":
  serve(app,port="8080",host="0.0.0.0")

Create a method called create_app() for example which returns the Flask object. You can add a route if you wish.

from flask import Flask

def create_app():
    app = Flask(__name__)

    @app.route('/')
    def hello_world():
      return 'Hello World!'
    return app

if your file is called app.py run the following command.

waitress-serve --port 8080 --call "app:create_app"

Output:

INFO:waitress:Serving on http://0.0.0.0:8080

Edit


If you really want to do it with waitress.serve() you can do this. For some reason this only works on localhost (127.0.0.1)

With your code the server starts and is accessable (the only thing you need are some routes) the only thing that is missing is terminal output.

You can activate logging like this:

import logging
logger = logging.getLogger('waitress')
logger.setLevel(logging.INFO)

This causes the output:

INFO:waitress:Serving on http://127.0.0.1:8080

If you want to see every request: install paste pip install paste and use TransLogger

from paste.translogger import TransLogger
# modify serve function
serve(TransLogger(app, setup_console_handler=False), host='127.0.0.1', port=8080)

This causes the following output on every request.

INFO:wsgi:127.0.0.1 - - [21/Jul/2022:15:40:25 +0200] "GET / HTTP/1.1" 200 12 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

Of course this depends on your browser.

Full code:

from flask import Flask
from waitress import serve
from paste.translogger import TransLogger
import logging
logger = logging.getLogger('waitress')
logger.setLevel(logging.INFO)

app = Flask(__name__)

@app.route('/')
def hello():
  return 'Hello World!'


serve(TransLogger(app, setup_console_handler=False), host='127.0.0.1', port=8080)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM