最近一直在读tornado的代码,大概是看懂了骨架。关于结构的部分,google一下应该会有比较多的分析,我主要想讲下在tornado/stack_context.py文件里面的StackContext类的作用。
StackContext从字面意义来说,翻译过来,就是“堆栈上下文”。拆开来看,就是用“堆栈”这种数据结构,保存“上下文”。
在tornado的mailing list里面,motor库的作者有说到这么一点。大概的意思是说,在把函数扔到异步调用里面的时候(挖坑准备下一篇讲Futures),如果这个callback本身会抛错的话,抛出的异常本身信息是不正确的。而为了修补这个“bug”,于是就引入了StackContext这个概念。
StackCotnext的用法,我一开始看了下官网的简介,不是很理解。
后来,在tornado的test目录下,有个stack_context_test.py文件,里面写了一整套的测试用例,可以结合来看。你可以看到作者的代码,能清楚的认识到它的作用。
主要作用就是上文提到的保存函数发生的上下文信息。
PS:在阅读代码的过程中,google了很多其他的资料,这里就不放出来了。大概的意思是,代码还是要自己读,而且主动点去查阅不懂的东西。然后呢,不要怕耗费时间,花点心思是能看懂的。我怎么会告诉你,为了搞懂StackContext类的作用,我基本把整个tornado撸了一遍,耗时超长哦…XD