当运行gunicorn这个命令启动flask的时候

首先回去调用gunicorn/app/wsgiapp中的run方法

gunicorn flask的请求流程

回去调用run()方法,这个run方式本质是gunicorn/arbiter中的run()方法

gunicorn flask的请求流程

主要就关注其中manage_workers()方法

gunicorn flask的请求流程

很明显调用了spawn_workers()方法,这个方式只是遍历了spawn_worker()。因此我们直接看spawn_worker()方法

gunicorn flask的请求流程

可以发现 初始化了一个workclass,这个worker是gunicorn/workers/sync。为什么是使用这个因为在gunicorn/config中的worker_class默认使用的SyncWorker

gunicorn flask的请求流程

好了接下来我们说一下worker,这些worker本质上都是为了处理一个一个request的

gunicorn flask的请求流程

看到respiter = self.wsgi(environ, resp.start_response)这个了吗,这就是gunicorn符合wsgi的内涵。这个吧当前的环境和一个response传进去,当然传出了的也是response。

我们看看这个方法是那里呢?

寻找了一下是在生成worker的时候传入的app中获取的。

gunicorn flask的请求流程

那么我们来看一下这个app到底是什么东西,在gunicorn中的Arbiter初始化函数中有一句

gunicorn flask的请求流程

这个app本质就是从外部初始化传进来的,寻找这个类常初始化的地方gunicorn/app/base中

gunicorn flask的请求流程

感情把自己的实例传进去了,不过在这里也找到了wsgi()方法

gunicorn flask的请求流程

这个load()方法是子类gunicorn/app/wsgiapp中实现的

gunicorn flask的请求流程

最后看一下load_wsgiapp()

gunicorn flask的请求流程

他的意思就是把你在命令中的app实例导入。这里最后提一下在flask中的实现,这个是FLASK类在flask/app.py中

gunicorn flask的请求流程

因为这个类实现了__call__方法所以使用实例传入参数以后就来到了flask框架进行request处理。


相关文章:

  • 2021-04-06
  • 2021-12-19
  • 2021-12-18
  • 2022-02-13
  • 2021-07-17
  • 2022-12-23
猜你喜欢
  • 2022-02-09
  • 2022-12-23
  • 2022-12-23
  • 2022-01-10
  • 2021-06-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案