我可以为多个客户端使用Flask app.run()作为独立的吗?
我知道我可以将Flask与Apache或其他Web服务器连接起来。 但是,我正在考虑将Flask作为一个独立的服务器同时运行多个客户端。
这可能吗? 我必须处理产卵多个线程和pipe理它们吗?
flask.Flask.run
接受附加的关键字参数( **options
),它转发给werkzeug.serving.run_simple
– 其中两个参数是threaded
(你可以设置为True
来启用线程)和processes
(你可以设置为数字大于1,让werkzeug产生多个进程来处理请求)。 所以如果你这样做:
if __name__ == '__main__': app.run(threaded=True) # Alternately # app.run(processes=3)
Flask将告诉Werkzeug使用线程,并产生三个进程来处理传入的请求。
也就是说,Werkzeug的serving.run_simple
包装了标准库的wsgiref
包 – 而且这个包包含了WSGI的参考实现,而不是生产就绪的web服务器。 如果您打算在生产环境中使用Flask(假设“生产”不是低stream量的内部应用程序,并发用户不超过10个),请确保将其置于真正的Web服务器之后(请参阅Flask的文档部分build议方法的部署选项 )。
在Flask中使用简单的app.run()
可以在一个线程上创build一个同步服务器,一次只能为一个客户端提供服务。 正是因为这个原因,它被devise用于低需求的控制环境(即开发,debugging)。
由于Python GIL ,产生线程并自己pipe理它们可能不会让你感觉很差 。
也就是说,你还是有一些不错的select。 Gunicorn是一个稳定,易于使用的WSGI服务器,它可以让你产生多个工作者(单独的进程,所以没有GIL的担心),甚至有asynchronous的工作人员 ,可以加快你的应用程序(并使其更安全)到你没有工作(尤其是与烧瓶)。
不过,甚至连Gunicorn都不应该直接公开曝光。 在生产中,应该使用更强大的HTTP服务器; nginx往往与Gunicorn和Flask很好。