gunicorn flask的请求流程

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

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

gunicorn flask的请求流程_第1张图片

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

gunicorn flask的请求流程_第2张图片

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

gunicorn flask的请求流程_第3张图片

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

gunicorn flask的请求流程_第4张图片

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

gunicorn flask的请求流程_第5张图片

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

gunicorn flask的请求流程_第6张图片

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

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

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

gunicorn flask的请求流程_第7张图片

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

gunicorn flask的请求流程_第8张图片

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

gunicorn flask的请求流程_第9张图片

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

gunicorn flask的请求流程_第10张图片

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

gunicorn flask的请求流程_第11张图片

最后看一下load_wsgiapp()

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

gunicorn flask的请求流程_第12张图片

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


你可能感兴趣的:(flask)