与WSGI中的中间件相关的一段代码的解释
2010-04-25 22:12
225 查看
理解下面的几行代码:
先看看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两个参数。
#python code snippet app = web.application(url_mapping) app.run(partial(ThreadControl, thread_mapping=thread_mapping)) def run(self, *middleware): return wsgi.runwsgi(self.wsgifunc(*middleware)) def wsgifunc(self, *middleware, **kw): def wsgi(env, start_resp): pass for m in middleware: wsgi = m(wsgi) return wsgi class ThreadControl(object): def __init__(self, func, thread_mapping): def __call__(self, env, start_resp): print env...#do something return self.func(env, start_resp)
先看看partial函数的定义:
def partial(func, *args, **keywords): def newfunc(*fargs, **fkeywords): newkeywords = keywords.copy() newkeywords.update(fkeywords) return func(*(args + fargs), **newkeywords) newfunc.func = func newfunc.args = args newfunc.keywords = keywords return newfunc
说明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两个参数。
相关文章推荐
- asp错误代码及相关解释
- 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之三 导出数据库数据为xml格式自定义
- java 类锁和对象锁的一段代码,不解释
- 一段神奇的代码-关于PHP字符变量奇怪现象的解释
- 意外获得一段“飘窗”的代码,配有很详细的图文解释,下次要用“飘窗”,记得来找我!
- 关于异步回调的一段代码及相关总结
- 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之四 读取xml格式文档到界面
- 帮我解释一段代码
- 弹出页面代码及相关解释
- 文件上传相关代码及解释 java web
- 一段业务相关的解析代码
- 题 阅读 评论 评论权限 操作 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之五 导入xml格式文档数据到数据库
- [ARM] Cortex-M Startup.s启动文件相关代码解释
- 深度学习 6. MatConvNet 相关函数解释说明,MatConvNet 代码理解(二)cnn_mnist_init.m 的注释
- 一段Ruby代码的解释
- 关于com解释的一段代码,你懂的
- 一段神奇的代码-关于PHP字符变量奇怪现象的解释
- [ARM] Cortex-M Startup.s启动文件相关代码解释
- 简单明了地解释JMS , 相关概念 ,以及JMS的实例代码下载 ,传统使用方式(非Spring框架下的集成)