我知道我可以将Flask与Apache或其他Web服务器连接起来.但是,我正在考虑将Flask作为独立服务器运行,同时为多个客户端提供服务.
这可能吗?我是否必须处理产生多个线程并管理它们?
Sea*_*ira 267
flask.Flask.run接受**options其转发的其他关键字参数()werkzeug.serving.run_simple- 其中两个参数threaded(可以设置为processes启用线程)和threaded(可以将其设置为大于1的数字以使werkzeug生成多个进程来处理请求) .所以,如果你这样做:
if __name__ == '__main__':
app.run(threaded=True)
Run Code Online (Sandbox Code Playgroud)
Flask将告诉Werkzeug使用线程并生成三个进程来处理传入的请求.
话虽如此,Werkzeug True包装了标准库的threaded=True包 - 该包包含WSGI的参考实现,而不是生产就绪的Web服务器.如果你打算在生产中使用Flask(假设"生产"不是一个不超过10个并发用户的低流量内部应用程序),请确保在真正的Web服务器后面站起来(参见Flask的文档部分)某些建议方法的部署选项).
Rya*_*ona 60
使用app.run()Flask中的simple 来在单个线程上创建一个同步服务器,一次只能为一个客户端提供服务.出于这个原因,它旨在用于需求低的受控环境(即开发,调试).
由于Python GIL,产生线程并自己管理它们可能不会让你走得太远.
也就是说,你仍然有一些不错的选择.Gunicorn是一个坚固,易于使用的WSGI服务器,它可以让你产生多个工作者(单独的进程,因此没有GIL担心),甚至还带有异步工作程序,可以加速你的应用程序(并使其更安全)没有你的工作(特别是与Flask).
尽管如此,即使是Gunicorn也不应该直接公开曝光.在生产中,它应该在更强大的HTTP服务器后面使用; nginx与Gunicorn和Flask相处得很好.
Gre*_* Li 12
来自 2020 年的提示:
从 Flask 1.0 开始,它默认启用多线程(source),你不需要做任何事情,只需升级它:
$ pip install -U flask
Run Code Online (Sandbox Code Playgroud)
如果您使用flask run而不是app.run()旧版本,则可以使用命令选项 ( --with-threads/--without-threads)控制线程行为:
$ flask run --with-threads
Run Code Online (Sandbox Code Playgroud)
它与 app.run(threaded=True)
| 归档时间: |
|
| 查看次数: |
152808 次 |
| 最近记录: |