Flask 支持使用原生的 app.run()
方法来启动应用程序。这种方法是最简单、最基本的启动方式,适用于开发环境和小型应用程序。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
以上代码定义了一个简单的 Flask 应用程序,其中一个路由 /
映射到了一个名为 hello_world()
的视图函数。在最后一行,我们通过 app.run()
方法启动了应用程序。
在默认情况下,app.run()
方法将监听 localhost:5000
地址,并在调试模式下运行。如果要在其他地址或端口上运行应用程序,可以在 app.run()
方法中传入参数:
app.run(host='0.0.0.0', port=8080)
在生产环境中,我们通常不会使用原生的 app.run()
方法来启动 Flask 应用程序。这是因为它只能处理一个请求,而且性能较差。因此,在生产环境中,我们通常会使用其他的 Web 服务器来运行 Flask 应用程序。
gevent 是一个基于协程的 Python 网络库,它可以实现高并发和异步网络 IO。使用 gevent 启动 Flask 应用程序可以提高应用程序的并发处理能力和性能。
from gevent import monkey; monkey.patch_all()
from gevent.pywsgi import WSGIServer
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
http_server = WSGIServer(('0.0.0.0', 8080), app)
http_server.serve_forever()
以上代码中,我们首先通过 monkey.patch_all()
方法打补丁,使得 Flask 应用程序可以使用 gevent 进行异步 IO。然后,我们使用 WSGIServer
对象将 Flask 应用程序封装为一个 WSGI 应用程序,并在 serve_forever()
方法中启动了 Web 服务器。
tornado 是一个流行的 Python Web 框架和异步网络库,与 gevent 类似,它也可以提高 Flask 应用程序的并发处理能力和性能。
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8080)
IOLoop.current().start()
waitress 是一个轻量级的 Python Web 服务器,它可以与 WSGI 应用程序一起工作。使用 waitress 启动 Flask 应用程序可以提高应用程序的性能和稳定性。
from waitress import serve
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
serve(app, host='0.0.0.0', port=8080)
以上代码中,我们使用 serve()
方法启动了 waitress Web 服务器,并在其中将 Flask 应用程序作为参数传入。我们还可以通过 host
和 port
参数指定监听的地址和端口。
本文介绍了 Flask 的四种启动方法:原生启动、gevent 启动、tornado 启动以及 waitress 启动。每种启动方法都有其优点和适用场景,除本文四种启动方式外,Flask还支持其他很多种启动方式和托管方式,开发者可以根据自己的需求进行选择。