StackContext in Tornado

背景

最近一直在读 tornado 的代码,大概是看懂了骨架。关于结构的部分,google 一下应该会有比较多的分析,我主要想讲下在 tornado/stack_context.py 文件里面的 StackContext 类的作用。

StackContext 是什么

StackContext 从字面意义来说,翻译过来,就是 “堆栈上下文”。拆开来看,就是用 “堆栈” 这种数据结构,保存 “上下文”。

为什么提出 StackContext 这个概念

在 tornado 的 mailing list 里面,motor 库的作者有说到这么一点。大概的意思是说,在把函数扔到异步调用里面的时候(挖坑准备下一篇讲 Futures),如果这个 callback 本身会抛错的话,抛出的异常本身信息是不正确的。而为了修补这个 “bug”,于是就引入了 StackContext 这个概念。

StackContext 用在什么地方

StackCotnext 的用法,我一开始看了下官网的简介,不是很理解。

后来,在 tornado 的 test 目录下,有个 stack_context_test.py 文件,里面写了一整套的测试用例,可以结合来看。你可以看到作者的代码,能清楚的认识到它的作用。

主要作用就是上文提到的保存函数发生的上下文信息。

更多的参考资料

PS:在阅读代码的过程中,google 了很多其他的资料,这里就不放出来了。大概的意思是,代码还是要自己读,而且主动点去查阅不懂的东西。然后呢,不要怕耗费时间,花点心思是能看懂的。我怎么会告诉你,为了搞懂 StackContext 类的作用,我基本把整个 tornado 撸了一遍,耗时超长哦…XD