wsgi是如何调用flask的?

按照https://www.zhihu.com/questio...
wsgi是尽量重复使用线程?

如果有两个请求到达访问,flask是不是会建立两个线程,执行两次before_first_request?
那么我想在before_first_request来欲处理一些耗时工作不就反而更耗费时间了么?
我的耗时任务应该放到哪里执行?

阅读 3.8k
1 个回答
  1. WSGI 对线程的使用方式没有要求;
  2. Flask 是一个 WSGI 的框架(application/framework),不是一个 WSGI 服务器(server/gateway),因此 Flask 不会“建立线程”,应该是 WSGI 服务器可能会建立线程;
  3. 不同的 WSGI 服务器有不同的实现,甚至同一个 WSGI 服务器也可以配置成用不同的方式来处理请求,比如 gunicorn 和 uWSGI;
  4. 根据 Flask 的有关源码,是否触发 before_first_request 取决于 app 实例的 _got_first_request 属性。因此,配置了多线程模型的服务器通常可以在多个线程间共享同一个 app 实例,因此并发请求只会触发一次 before_first_request;而配置了多进程模型的服务器则有较大概率(取决于 fork 的时机)在每一个进程中都触发一次 before_first_request,毕竟每个进程都有自己的 app 实例。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题