与WSGI中的中间件相关的一段代码的解释

来源:互联网 发布:mac大型单机游戏知乎 编辑:程序博客网 时间:2024/05/22 01:50

理解下面的几行代码:

先看看partial函数的定义:

说明partial函数返回了一个新的函数地址,执行时实际上是调用了传给partial的第一个参数。 

 

再返回到第一段代码,在第4行中第一个参数ThreadControl是调用对象,后面的thread_mapping是传递给ThreadControl的参数,但是这时还没有生成ThreadControl类的实例。依次调用时第7行中的middleware就是一个新的函数地址了,这个函数已经有了一个参数,即thread_mapping,到14行时调用了这个新的函数,同时又给它传递了另外一个参数,即wsgi,当然这里的wsgi也是一个函数地址。这样ThreadControl类初始化需要的两个参数都齐全了,到这里才生成ThreadControl类的实例。所以在第16行返回的是ThreadControl类的实例。当这个实例被调用时(比如flup的fcgi_base.py中的result = self.application(environ, start_response)),就会执行21行的__call__函数,这样就完成了中间件的功能。记住传进来的func是一个函数wsgi,所以func可以被调用,因为wsgi的定义需要两个参数env和start_resp,所以23行调用时也要传给func两个参数。

原创粉丝点击